求解二叉树最小深度

简介: 求解二叉树最小深度

公众号merlinsea


最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。


思路1:递归

640.png

代码如下:


class Solution {
public:
    int run(TreeNode *root)
{
        if(root == nullptr) return 0;
        if(root->left == nullptr) // 若左子树为空,则返回右子树的最小深度+1
        {
            return run(root->right)+1;
        }
        if(root->right == nullptr) // 若右子树为空,则返回左子树的最小深度+1
        {
            return run(root->left)+1;
        }
        // 左右子树都不为空时,取较小值
        int leftDepth = run(root->left);
        int rightDepth = run(root->right);
        return (leftDepth<rightDepth)?(leftDepth+1):(rightDepth+1);
    }
};


思路二:层序遍历,非递归版本


从上到下,从左到右,当遇到第一个叶子节点的时候就可以判断当前高度为最低的高度。

注意点:

1、叶子节点的判断不是 node ==null ,是node!=null && node.left==null && node.right ==null

2、数据结构是队列queue

3、判断当前层结束采用哨兵机制

640.png


class Solution {
public:
    typedef TreeNode* tree;
    int run(TreeNode *root) {
      if(!root) 
          return 0;
      queue<tree> qu;
      tree last,now;
      int level;
      //last是当前层的最后一个节点,充当哨兵
      last = now = root;
      level = 1;
      qu.push(root);
      while(qu.size()>0){
        now = qu.front();
        qu.pop();
        if(now->left==nullptr && now->right==nullptr)
            break;
        if(now->left)
            qu.push(now->left);
        if(now->right)
            qu.push(now->right);
        if(last == now){
            //当前层遍历结束,更新哨兵
          level++;
          if(qu.size())
              last = qu.back();
        }
      }
      return level;
    }
};


相关文章
|
2月前
【LeetCode 32】111.二叉树的最小深度
【LeetCode 32】111.二叉树的最小深度
19 0
12_二叉树的最小深度
12_二叉树的最小深度
|
7月前
|
人工智能 算法 BI
【树】【因子数】【数论】【深度优先搜索】2440. 创建价值相同的连通块
【树】【因子数】【数论】【深度优先搜索】2440. 创建价值相同的连通块
|
7月前
|
机器学习/深度学习 算法 测试技术
【深度优先搜索】【树】【C++算法】2003. 每棵子树内缺失的最小基因值
【深度优先搜索】【树】【C++算法】2003. 每棵子树内缺失的最小基因值
|
7月前
|
C++
二叉树的最小深度(C++)
二叉树的最小深度(C++)
38 1
|
7月前
|
C++ Python
leetcode-111:二叉树的最小深度
leetcode-111:二叉树的最小深度
47 0
|
算法 前端开发
前端算法-二叉树的最小深度
前端算法-二叉树的最小深度
Leetcode 111 二叉树最小深度
Leetcode 111 二叉树最小深度
133 0
力扣 111 104二叉树的最大深度和最小深度总结
力扣 111 104二叉树的最大深度和最小深度总结
53 0
leetcode 111 二叉树最小深度
leetcode 111 二叉树最小深度
63 0
leetcode 111 二叉树最小深度