zoukankan      html  css  js  c++  java
  • 二叉树的深度 (递归与非递归方法)

    一、 递归的方法

    思路:

    我们可以从另一个角度来理解树的深度:

    如果一棵树只有一个结点,那么它的深度为1

    如果根结点只有左子树没有右子树,那么树的深度是左子树的深度加1,加1是加上根节这一层

    如果既有左子树又有右子树,那么树的深度应该是左、右子树中深度较大的值再加1

    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    class Solution {
    public:
        int TreeDepth(TreeNode* pRoot)
        {
         if(pRoot==NULL)
                return 0;
    
            int nleft = TreeDepth(pRoot->left);
            int nright = TreeDepth(pRoot->right);
    
            return (nleft>nright)?(nleft+1):(nright+1);
    
        }
    };

    二、非递归方法

    思路

    采用层次遍历的方法,类似bfs的解法

    每遍历一层,depth++;

    每一层,需使用一个变量len记录该层的结点个数,也就是队列的当前长度,然后依次在队列中访问该层的len个结点(将队列中len个元素出队列),并将下一层如队列。

    int TreeDepth(TreeNode* pRoot)
        {
         queue<TreeNode*> q;
            if(!pRoot) return 0;
            q.push(pRoot);
            int level=0;
            while(!q.empty()){
                int len=q.size();
                level++;
                while(len--){
                    TreeNode* tem=q.front();
                    q.pop();
                    if(tem->left) q.push(tem->left);
                    if(tem->right) q.push(tem->right);
                }
            }
            return level;
        } 
  • 相关阅读:
    hdu 4474 转化为bfs + 一个巧妙的剪枝~
    数据结构几类排序的总结和完整代码 待续。。
    poj 2135 Farm Tour
    hdu 4374 (单调队列+dp)
    poj2391 Ombrophobic Bovines 拆点连边要注意
    hdu3507
    hdu1506
    poj2175
    poj3308
    poj3155 Hard Life
  • 原文地址:https://www.cnblogs.com/qixinbo/p/7892068.html
Copyright © 2011-2022 走看看