求树的深度
来源:互联网 发布:医学数据分析 编辑:程序博客网 时间:2024/04/29 01:55
求树的深度,依然是递归遍历一棵树,每次进入一个子结点,记录树深
算法思路:
代码实现:1.这里采用后续遍历
2.设置一个全局的变量maxDept
3.每次从树根进入树的子结点,让maxDept的值增加1
若是已经进入作结点,进入右结点就不必要加1了
4.遍历之后,就能得到树的深度了
#include<iostream>struct TreeNode{ int value; TreeNode* lChild; TreeNode* rChild;};TreeNode* buildTree(int tnv[],int nodeNumber){ if(nodeNumber==0) return NULL; TreeNode* nodes[nodeNumber]; for(int i=0; i<nodeNumber; i++){ nodes[i] = new TreeNode; nodes[i]->value = tnv[i]; nodes[i]->lChild = NULL; nodes[i]->rChild = NULL; } //connect all the nodes int lChildIndex=0,rChildIndex=0; for(int i=0; i<nodeNumber; i++){ //left child connect lChildIndex = 2*i + 1; if(lChildIndex < nodeNumber) nodes[i]->lChild = nodes[lChildIndex]; rChildIndex = 2*i + 2; if(rChildIndex < nodeNumber) nodes[i]->rChild = nodes[rChildIndex]; } return nodes[0];}//postorder a tree and change the maxDept void postorder(TreeNode* root,int& maxDept,int dept){ TreeNode* p=root; dept++; if(dept > maxDept) maxDept = dept; if(p->lChild) postorder(p->lChild,maxDept,dept); if(p->rChild) postorder(p->rChild,maxDept,dept);}//return tree's deptint treeDept(TreeNode* root){ int maxDept=-1,dept=-1; if(!root) return -1; postorder(root,maxDept,dept); return maxDept;}int main(){ int treeNodeNumbers=-1; int treeNodeValue1[]={5,3,7,2,4,6}; treeNodeNumbers = sizeof(treeNodeValue1)/sizeof(int); TreeNode* root1 = buildTree(treeNodeValue1,treeNodeNumbers); std::cout<<"tree1's dept is: "<<treeDept(root1)<<std::endl; int treeNodeValue2[]={5,3,7,2,4,6,9,1}; treeNodeNumbers = sizeof(treeNodeValue2)/sizeof(int); TreeNode* root2 = buildTree(treeNodeValue2,treeNodeNumbers); std::cout<<"tree2's dept is: "<<treeDept(root2)<<std::endl; int treeNodeValue3[]={5,3,7}; treeNodeNumbers = sizeof(treeNodeValue3)/sizeof(int); TreeNode* root3 = buildTree(treeNodeValue3,treeNodeNumbers); std::cout<<"tree3's dept is: "<<treeDept(root3)<<std::endl; int treeNodeValue4[]={}; treeNodeNumbers = sizeof(treeNodeValue4)/sizeof(int); TreeNode* root4 = buildTree(treeNodeValue4,treeNodeNumbers); std::cout<<"tree4's dept is: "<<treeDept(root4)<<std::endl; int treeNodeValue5[]={6}; treeNodeNumbers = sizeof(treeNodeValue5)/sizeof(int); TreeNode* root5 = buildTree(treeNodeValue5,treeNodeNumbers); std::cout<<"tree5's dept is: "<<treeDept(root5)<<std::endl; return 0;}
运行结果:
其对应的树分别为:(树深度从0开始计数)
- 求树的深度
- 求树的深度
- 求树的深度
- 求树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二元树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二元树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 循序渐进linux 第十四章 linux系统进程管理(完善中)
- 软考四 设计模式
- 开源 免费 java CMS - FreeCMS1.5-数据对象-guestbook
- ADD、SUB、RSB、ADC、SBC 和 RSC
- HDU 2145 zz's Mysterious Present
- 求树的深度
- 将 Shiro 作为应用的权限基础 二:基于SpringMVC实现的认证过程
- 异常(二)
- 大三的抉择
- uva 11181 - Probability|Given(概率)
- 不是技术牛人,如何拿到国内IT巨头的Offer
- 线程、线程句柄、线程ID的关系
- ora-00059表空文件数超过DB_FILES值
- some url