求树的深度

来源:互联网 发布:医学数据分析 编辑:程序博客网 时间: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开始计数)



















原创粉丝点击