编程语言
首页 > 编程语言> > C语言- 基础数据结构和算法 - 11 12 二叉树实践_拷贝二叉树20220612

C语言- 基础数据结构和算法 - 11 12 二叉树实践_拷贝二叉树20220612

作者:互联网

12 二叉树实践_拷贝二叉树20220612,

 听黑马程序员教程《基础数据结构和算法 (C版本)》,

照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1

喜欢的朋友可以去看看,欢迎大家一起交流学习。

二叉树的拷贝

12 二叉树实践_拷贝二叉树20220612.c

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4 
  5 
  6 // 二叉树结点 
  7 typedef struct BINARYNODE{
  8     char ch;
  9     struct BINARYNODE* lchild;        // 左结点
 10     struct BINARYNODE* rchild;        // 右结点 
 11 }BinaryNode;
 12 
 13 // 递归遍历 输出 
 14 void Recursion(BinaryNode* root,int D){
 15     
 16     if(root==NULL){
 17         return;
 18     }
 19     
 20     switch(D){
 21         
 22         case 1: // 先序遍历:D L R
 23         
 24             // 先访问根结点 D
 25             printf("%c ",root->ch);
 26             // 再遍历左子树 L。左子树是“树”,有根的子结点,所以递归重头来。
 27             Recursion(root->lchild,1);
 28             // 再遍历右子树 R
 29             Recursion(root->rchild,1); 
 30             break; 
 31             
 32         case 2:    // 中序遍历:L D R
 33             
 34             // 先访问左子数    L     
 35             Recursion(root->lchild,2);    
 36             // 再访问根结点 D
 37             printf("%c ",root->ch);            
 38             // 再访问右子树 R 
 39             Recursion(root->rchild,2);
 40             break;
 41             
 42         case 3:    // 后序遍历:L R D
 43         
 44             // 先访问左子数    L     
 45             Recursion(root->lchild,3);                
 46             // 再访问右子树 R
 47             Recursion(root->rchild,3);
 48             // 再访问根结点 D
 49             printf("%c ",root->ch);
 50             break;
 51         default:
 52             break;             
 53     }
 54 
 55 } 
 56 
 57 
 58 // 拷贝二叉树
 59 BinaryNode* CopyBinaryTree(BinaryNode* root){
 60     
 61     if(root==NULL){
 62         return NULL;
 63     }
 64     
 65     // 拷贝左子树
 66     BinaryNode* lchild = CopyBinaryTree(root->lchild);
 67     // 拷贝右子树 
 68     BinaryNode* rchild = CopyBinaryTree(root->rchild);
 69     
 70     // 创建当前结点
 71     BinaryNode* newnode = (BinaryNode*)malloc(sizeof(BinaryNode));
 72     newnode->ch = root->ch;
 73     newnode->lchild = lchild;
 74     newnode->rchild = rchild;
 75      
 76     return newnode;
 77 } 
 78 
 79 // 递归释放内存
 80 void FreeSpaceBinaryTree(BinaryNode* root){
 81     
 82     if(root==NULL){
 83         return;
 84     }
 85     
 86     // 释放左右子树 
 87     FreeSpaceBinaryTree(root->lchild);
 88     FreeSpaceBinaryTree(root->rchild);
 89     // 释放当前节点
 90     free(root); 
 91     
 92 } 
 93 
 94 // 手动构建二叉树
 95 void CresteBinaryTree(){
 96     // 共8个结点
 97     BinaryNode nodeA = {'A',NULL,NULL};
 98     BinaryNode nodeB = {'B',NULL,NULL};
 99     BinaryNode nodeC = {'C',NULL,NULL};
100     BinaryNode nodeD = {'D',NULL,NULL};
101     BinaryNode nodeE = {'E',NULL,NULL};
102     BinaryNode nodeF = {'F',NULL,NULL};
103     BinaryNode nodeG = {'G',NULL,NULL};
104     BinaryNode nodeH = {'H',NULL,NULL};
105     //BinaryNode nodeI = {'I',NULL,NULL};
106     //BinaryNode nodeJ = {'J',NULL,NULL};
107     // 节点关系
108     nodeA.lchild = &nodeB;
109     nodeA.rchild = &nodeF;
110     nodeB.rchild = &nodeC;
111     nodeC.lchild = &nodeD;
112     nodeC.rchild = &nodeE;
113     nodeF.rchild = &nodeG;
114     nodeG.lchild = &nodeH; 
115 //    nodeH.lchild = &nodeI;
116 //    nodeI.lchild = &nodeJ;
117 
118     // 先序遍历
119     printf("\n先序遍历:");
120     Recursion(&nodeA,1);
121         
122     BinaryNode* root = CopyBinaryTree(&nodeA);
123     // 先序遍历
124     printf("\n\n拷贝新的树:");
125     printf("\n先序遍历:");
126     Recursion(root,1);
127     
128     // 释放内存
129     FreeSpaceBinaryTree(root);
130     FreeSpaceBinaryTree(&nodeA); 
131 
132 } 
133 
134 
135 int main(){
136     printf("好好学习,天天向上~!!\t\t\t 12 二叉树实践_拷贝二叉树20220612\n\n\n");
137     
138     
139     CresteBinaryTree();     
140     
141     
142     
143     printf("\n\n\n");
144     system("pause");
145     
146     return 0;
147 }

 

标签:11,lchild,20220612,BinaryNode,rchild,NULL,root,二叉树
来源: https://www.cnblogs.com/stou/p/16367737.html