2010-10-12 3 views

ответ

2

Я думаю, что это будет что-то вроде этого.

void copyInOrder(TNode *orgTree, Tnode *& copyTree){ 
    if(orgTree !=NULL){ 
     //left side 
     TNode newLeftNode = cloneNode(orgTree->left_link); 
     copyTree->left_link = newLeftNode; 
     copyInOrder(orgTree->left_link, copyTree->left_link); 

     //right side 
     TNode newRightNode = cloneNode(orgTree->right_link); 
     copyTree->right_link = newRightNode; 
     copyInOrder(orgTree->right_link, copyTree->right_link); 
    } 
} 
+2

где - определение cloneNode? –

+0

@ user432495 Я не писал его, но это был бы метод, который создал новый узел на основе данных из другого. – Alpha

2

Пусть orgTree указывает на корень (2). Для копирования, мы должны сделать следующее:

alt text

  1. создать узел в copyTree, а копия значение 2 в него
  2. если orgTree->left != NULL, вызовите copyInOrder(orgTree->left, copyTree->left);
  3. если orgTree->right != NULL, звоните по телефону copyInOrder(orgTree->right, copyTree->right);

BTW, этот тип обхода известен как pre-order traversa l, в порядке прохождения отличается.

3
tnode *copy(tnode *root) { 
    tnode *new_root; 
    if(root!=NULL){ 
     new_root=new tnode; 
     new_root->data=root->data; 
     new_root->lchild=copy(root->lchild); 
     new_root->rchild=copy(root->rchild); 
    } else return NULL; 
    return new_root; 
} 
Смежные вопросы