c++ 實現二叉樹的拷貝


使用該圖例:並將以先序遍歷的結果打印 原二叉樹和拷貝后的二叉樹

該圖例先序遍歷結果為:A B C D E F G H

 

 

直接上代碼:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 //二叉樹節點
 5 struct BinaryNode
 6 {
 7     char ch;
 8     BinaryNode* lchild;
 9     BinaryNode* rchild;
10 };
11 BinaryNode* CopyTree(BinaryNode* root);
12 void TreeFree(BinaryNode* root);
13 void Recursion(BinaryNode* root) {
14     if (!root) return;
15     cout << root->ch << " ";
16     Recursion(root->lchild);
17     Recursion(root->rchild);
18 }
19 
20 //初始化二叉樹
21 void CreateBinaryTree() {
22     BinaryNode node1 = { 'A',NULL,NULL };
23     BinaryNode node2 = { 'B',NULL,NULL };
24     BinaryNode node3 = { 'C',NULL,NULL };
25     BinaryNode node4 = { 'D',NULL,NULL };
26     BinaryNode node5 = { 'E',NULL,NULL };
27     BinaryNode node6 = { 'F',NULL,NULL };
28     BinaryNode node7 = { 'G',NULL,NULL };
29     BinaryNode node8 = { 'H',NULL,NULL };
30     //建立節點關系
31     node1.lchild = &node2;
32     node1.rchild = &node6;
33     node2.rchild = &node3;
34     node3.lchild = &node4;
35     node3.rchild = &node5;
36     node6.rchild = &node7;
37     node7.lchild = &node8;
38     cout << "原二叉樹:\n";
39     Recursion(&node1);
40     BinaryNode* p = CopyTree(&node1);
41     cout << "\n拷貝后二叉樹:\n";
42     Recursion(p);
43     //釋放拷貝二叉樹的內存
44     TreeFree(p);
45 
46 }
47 //二叉樹拷貝
48 BinaryNode* CopyTree(BinaryNode* root) {
49     if (!root) return NULL;
50     BinaryNode* ltree= CopyTree(root->lchild);
51     BinaryNode* rtree= CopyTree(root->rchild);
52     
53     BinaryNode* newtree = new BinaryNode;
54     newtree->ch = root->ch;
55     newtree->lchild = ltree;
56     newtree->rchild = rtree;
57     return newtree;
58 }
59 void TreeFree(BinaryNode* root) {
60     if (!root)    return;
61     TreeFree(root->lchild);
62     TreeFree(root->rchild);
63     delete root;
64 }
65 
66 
67 int main() {
68     CreateBinaryTree();
69     return 0;
70 }

 

結果:

        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM