【剑指offer】二叉树的深度

来源:互联网 发布:剑三成男免费捏脸数据 编辑:程序博客网 时间:2024/06/17 14:58

题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

方法一分析:主要思想就是层序遍历,就是有遍历上一层的每一个节点,得到下一层的所有节点,再有下一层的节点得到下下层的所有节点,直到下层的节点个数为0时结束。

    int TreeDepth(TreeNode* pRoot)    {     if(!pRoot) return 0;        vector<TreeNode *> temp;  //保存上一层的节点;        temp.push_back(pRoot);        int k=1,het=1;        while(!temp.empty()){            int count=0;            while(k--){   //上一层有k个节点,就循环k次;                if(temp[0]->left) {temp.push_back(temp[0]->left);count++;}                if(temp[0]->right) {temp.push_back(temp[0]->right);count++;}                temp.erase(temp.begin());            }            if(count>0)  //如果下一层有count(>0)个节点,那么深度加1,k更新为count;{het++;k=count;}        }        return het;    }

方法二分析:用递归的思想做的,路径一条一条的找,节点一个一个的增加,定义2个变量,一个保存每条路径的长度,一个保存现有路径的最大值,最后返回最大值就可以了。

void dgdeep(TreeNode *roop,int t,int &k){if(!roop->left&&!roop->right) {k=max(k,t);  //当一条路径结束时,更新k的值;return;}if(roop->left)  dgdeep(roop->left,t+1,k);if(roop->right)  dgdeep(roop->right,t+1,k);}int TreeDepth(TreeNode* pRoot){if(!pRoot)  return 0;int t=1,k=0;   //t记录每条路径的深度,k记录当前最深的路径长度;dgdeep(pRoot,t,k);return k;}



原创粉丝点击