ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-06-12 12:35:05  阅读:137  来源: 互联网

标签:11 lchild 20220612 BinaryNode rchild NULL root 二叉树


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有