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;
        } 
  • 相关阅读:
    使用Post方法模拟登陆爬取网页
    微信公众号开发
    一致哈希
    两阶段提交协议、三阶段提交协议
    自动化部署脚本
    zabbix邮件报警
    Paxos算法
    MVC 全局异常处理及禁用显示头
    弹出层或者下拉菜单被下面的 层遮挡住了解决办法
    Bootstap datetimepicker报错TypeError: intermediate value(转)
  • 原文地址:https://www.cnblogs.com/qixinbo/p/7892068.html
Copyright © 2011-2022 走看看