求樹的深度,依然是遞歸遍歷一棵樹,每次進入一個子結點,記錄樹深
算法思路:
代碼實現: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 dept int 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開始計數)