二叉树
今天用到了二叉树,长时间不用,都快忘了,所以就练习着写了一个二叉树,采用的递归遍历。具体代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 using namespace std; 3 typedef struct BiTNode 4 { 5 char data; 6 struct BiTNode *lchild,*rchild; 7 }BiTNode,*biTree; 8 9 class MyBigTree 10 { 11 public: 12 MyBigTree(){} 13 ~MyBigTree(){} 14 void Create(biTree &T);//创建 15 void Preorder(biTree &T);//先序遍历打印二叉树 16 void Inorder(biTree &T);//中序遍历打印二叉树 17 void Postorder(biTree &T);//后续遍历打印二叉树 18 int LeafCount(biTree &T);//统计叶子节点的个数 19 int POstTreeDepth(biTree &T);//统计树的高度 20 void PreLeaforder(biTree &T); 21 biTree root;//数据 22 void Free(biTree &T);//释放 23 protected: 24 int MAX(int x,int y) 25 { 26 return (x>y?x:y); 27 } 28 private: 29 }; 30 //函数实现 31 void MyBigTree::Create(biTree &T) 32 { 33 char ch; 34 cin>>ch; 35 if (ch=='#') 36 { 37 T=NULL; 38 } 39 else 40 { 41 T=(BiTNode*)malloc(sizeof(BiTNode)); 42 T->data=ch; 43 Create(T->lchild); 44 Create(T->rchild); 45 } 46 } 47 48 void MyBigTree::Free(biTree &T) 49 { 50 if (T!=NULL) 51 { 52 Free(T->lchild); 53 Free(T->rchild); 54 free(T); 55 T=NULL; 56 } 57 } 58 59 void MyBigTree::Preorder(biTree &T) 60 { 61 if (T!=NULL) 62 { 63 cout<<T->data<<" "; 64 Preorder(T->lchild); 65 Preorder(T->rchild); 66 } 67 } 68 69 void MyBigTree::Inorder(biTree &T) 70 { 71 if (T!=NULL) 72 { 73 Inorder(T->lchild); 74 cout<<T->data<<" "; 75 Inorder(T->rchild); 76 } 77 } 78 79 void MyBigTree::Postorder(biTree &T) 80 { 81 if (T!=NULL) 82 { 83 Postorder(T->lchild); 84 Postorder(T->rchild); 85 cout<<T->data<<" "; 86 } 87 } 88 89 int MyBigTree::LeafCount(biTree &T) 90 { 91 int leaf; 92 if (T==NULL) 93 { 94 return 0; 95 } 96 if (T->lchild==NULL&&T->rchild==NULL) 97 { 98 return 1; 99 } 100 else 101 leaf=LeafCount(T->lchild)+LeafCount(T->rchild); 102 return leaf; 103 } 104 105 int MyBigTree::POstTreeDepth(biTree &T) 106 { 107 int hl,hr,max; 108 if (T==NULL) 109 { 110 return 0; 111 } 112 else 113 { 114 hl=POstTreeDepth(T->lchild); 115 hr=POstTreeDepth(T->rchild); 116 max=MAX(hl,hr); 117 return max+1; 118 } 119 } 120 121 void MyBigTree::PreLeaforder(biTree &T) 122 { 123 if (T!=NULL) 124 { 125 if (T->lchild==NULL&&T->rchild==NULL) 126 { 127 cout<<T->data<<" "; 128 } 129 PreLeaforder(T->lchild); 130 PreLeaforder(T->rchild); 131 } 132 }
后来发现一篇写的比较好的文章,里面主要是研究了二叉树的非递归遍历。网址如下:
http://www.cnblogs.com/dolphin0520/archive/2011/08/25/2153720.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· .NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案
· .NET中 泛型 + 依赖注入 的实现与应用