数据结构--二叉树代码实现(建立,前序,中序,后续遍历,树的深度,销毁)
来源:互联网 发布:阿里云企业邮箱pop 编辑:程序博客网 时间:2024/06/06 15:47
代码的树的结构为
1
2 3
4 5 6 7
8
#include <stdio.h>#include <assert.h>#include <stdlib.h>/* 结构体 */typedef struct treenode{ struct treenode *pstLeftChild; struct treenode *pstRightChild; int idata;}TreeNode_S,TreeHead_S;/* 初始化树 */TreeHead_S *InitTree(TreeNode_S *pstNode){ TreeHead_S *tree = pstNode; return tree;}/* 创建树的节点 */TreeNode_S *CreateTreeNode(int idata, TreeNode_S *pstleftchild, TreeNode_S *pstrightchild){ TreeNode_S *pstNewNode; pstNewNode = malloc(sizeof(TreeNode_S)); if (pstNewNode != NULL) { pstNewNode->idata = idata; pstNewNode->pstLeftChild = pstleftchild; pstNewNode->pstRightChild = pstrightchild; } return pstNewNode;}/* 销毁树节点 */void DestroyTreeNode(TreeNode_S *pstTreeNode){ if (pstTreeNode != NULL) { printf("%d ", pstTreeNode->idata); free(pstTreeNode); } return;}/* 销毁树*/void DestroyTree(TreeHead_S *pstTreeHead){ if (pstTreeHead != NULL) { if (pstTreeHead->pstLeftChild != NULL) { DestroyTree(pstTreeHead->pstLeftChild); } if (pstTreeHead->pstRightChild != NULL) { DestroyTree(pstTreeHead->pstRightChild); } DestroyTreeNode(pstTreeHead); }}/* 获取树的深度 */int GetTreeDepth(TreeHead_S *pstTreeHead){ int l = 0; int r = 0; TreeNode_S *pstLeftChild; TreeNode_S *pstRightChild; if (pstTreeHead == NULL) { return 0; } l = 1; r = 1; l += GetTreeDepth(pstTreeHead->pstLeftChild); r += GetTreeDepth(pstTreeHead->pstRightChild); if (l < r) { l = r; } return l;}/* 前序遍历 */void Front_Scan(TreeHead_S *pstTreeHead){ if (pstTreeHead == NULL) { return; } printf("%d ",pstTreeHead->idata); Front_Scan(pstTreeHead->pstLeftChild); Front_Scan(pstTreeHead->pstRightChild); return;}/* 中序遍历 */void Middle_Scan(TreeHead_S *pstTreeHead){ if (pstTreeHead == NULL) { return; } Middle_Scan(pstTreeHead->pstLeftChild); printf("%d ",pstTreeHead->idata); Middle_Scan(pstTreeHead->pstRightChild); return;}/* 后序遍历 */void End_Scan(TreeHead_S *pstTreeHead){ if (pstTreeHead == NULL) { return; } End_Scan(pstTreeHead->pstLeftChild); End_Scan(pstTreeHead->pstRightChild); printf("%d ",pstTreeHead->idata); return;}int main(void){ TreeHead_S *pstTree; TreeNode_S *pstNode8 = CreateTreeNode(8, NULL, NULL); TreeNode_S *pstNode7 = CreateTreeNode(7, NULL, NULL); TreeNode_S *pstNode6 = CreateTreeNode(6, NULL, NULL); TreeNode_S *pstNode5 = CreateTreeNode(5, NULL, NULL); TreeNode_S *pstNode4 = CreateTreeNode(4, pstNode8, NULL); TreeNode_S *pstNode3 = CreateTreeNode(3, pstNode6, pstNode7); TreeNode_S *pstNode2 = CreateTreeNode(2, pstNode4, pstNode5); TreeNode_S *pstNode1 = CreateTreeNode(1, pstNode2, pstNode3); assert((pstNode1 != NULL)&&(pstNode2 != NULL)&&(pstNode3 != NULL)&& (pstNode4 != NULL)&&(pstNode5 != NULL)&&(pstNode6 != NULL)&& (pstNode7 != NULL)&&(pstNode8 != NULL)); pstTree = InitTree(pstNode1); printf("depth:%d\n", GetTreeDepth(pstTree)); printf("front scan: "); Front_Scan(pstTree); printf("\nmiddle scan: "); Middle_Scan(pstTree); printf("\nend scan: "); End_Scan(pstTree); printf("\ndestroy tree: "); DestroyTree(pstTree); printf("\n"); return 0;}
0 0
- 数据结构--二叉树代码实现(建立,前序,中序,后续遍历,树的深度,销毁)
- 编程实现二叉树的建立,前序遍历,中序遍历和后续遍历
- 根据前序遍历和后续遍历建立二叉树
- leetcode | 二叉树的前序遍历、中序遍历、后续遍历的非递归实现
- C++编程练习(8)----“二叉树的建立以及二叉树的三种遍历方式“(前序遍历、中序遍历、后续遍历)
- 二叉树的前序,中序及后续遍历
- 二叉树的前序、中序、后续遍历
- C++数据结构--二叉树的建立,前序遍历,中序遍历和后序遍历
- 二叉树遍历,已知前序遍历与中序遍历,求后续遍历 使用java(递归方式)实现
- 二叉树的前序、中序、后续遍历,递归、非递归实现
- Java 二叉树的前序、中序、后续遍历 递归和迭代实现
- 二叉树的非递归前序,中序,后续遍历实现
- 由前序遍历和中序遍历重建二叉树,再实现后续遍历
- python实现二叉树,前序遍历,中序遍历,后续遍历
- c++ 二叉树的构建 前序遍历 中序遍历 后续遍历 层次遍历
- 二叉树的建立及遍历(先序遍历、中序遍历、后续遍历、层次遍历)
- 二叉树的基本操作,前序遍历,后续遍历,中序遍历
- java版本_二叉树(前序遍历,中序遍历,后续遍历)
- 花生壳域名建站,内网能访问,外网不能访问的解决办法
- C++ 命名空间namespace的各种用法
- 【王道九度OJ】1202排序
- 每幅画素描前都要站五六分钟察觉不到时间流逝都到了中午
- 数据结构学习之线性表的单链表存储(1)
- 数据结构--二叉树代码实现(建立,前序,中序,后续遍历,树的深度,销毁)
- N9程序开发-生成项目
- MySql的目录结构
- 2133333334
- mongo phpadmin客户端
- SQL Server 为代码减负之存储过程
- 解决viewpaper与frament时出现的The specified child already has a parent. You must call removeView()问题
- Redis详细完整教程-windows下的安装、测试(php+redis+mysql)
- arm-linux_学习简单串口编程问题