Leetcode-1 二叉树的深度

问题:给定二叉树,找到它的最小深度。最小深度是沿从根节点到最近的叶节点的最短路径上的节点数。

分析:本题要注意最小深度与最大深度的区别:对于最大深度,不需要考虑当前子树是否为单子树(即一侧子树深度为0)的情况,即最大深度一直等于左右子树的最大值;对于最小深度,需要考虑当前子树是否为单子树的情况,对于双子树,其最小深度为左右子树的最小值,对于单子树,其最小深度为左右深度的最大值(因为有一侧的子树为0)

递归:

若左子树为空,则返回右子树的最小深度+1;(加1是因为要加上根这一层)

若右子树为空,则返回左子树的最小深度+1;

若左右子树均不为空,则取左、右子树最小深度的较小值,+1;

class Solution{
public:
    int run(TreeNode*root)
    {
        if(root == NULL)
           return 0;
        else if(root->left)
            return run(root->right)+1;
        else if(root->right)
            return run(root->left)+1;
        int depthLeft,depthRight;
        depthLeft = run(root->left);
        depthRight = run(root->right);
        return (depthLeft < depthRight)? (deptthLeft+1):(depthRight+1);
    }
}

层序遍历(广度优先),一层一层的遍历,直到遇到第一个叶子节点,则得到最短的深度

class Solution {
public:
    typedef TreeNode* tree;
    int run(TreeNode *root) {
        if(root == NULL)
            return 0;
        int level,size;
        tree now,last;
        now = last = root;
        queue<tree>qu;
        level = 1;
        qu.push(root);//root入队
        while(qu.size())
        {
            now = qu.front();
            qu.pop();
            size = qu.size();
            if(now->left)
                qu.push(now->left);
            if(now->right)
                qu.push(now->right);
            if(size == qu.size())//若入队的now没有左右节点,条件成立找到第一个叶子节点
                break;
            if(last == now)//last总是指向每层的最后一个,若相等则这一层完,换下一层
            {
                level++;
                last = qu.back();
            }
        }
         return level;   
        }
};

督促自己,不敢在懒了!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值