刷题日记 111. 二叉树的最小深度

93 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

111. 二叉树的最小深度 - 力扣(LeetCode) (leetcode-cn.com)

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明:叶子节点是指没有子节点的节点。

示例 1:

image.png

输入:root = [3,9,20,null,null,15,7]
输出:2

示例 2:

输入:root = [2,null,3,null,4,null,5,null,6]
输出:5

提示:

  • 树中节点数的范围在 [0, 105] 内
  • -1000 <= Node.val <= 1000

二、思路分析:

  1. 若根为空,返回最大深度为0;
  2. 若根非空,<根,深度为1>入栈;
  3. 若左子树非空,访问左子树,<左子树,++深度>入栈;
  4. 重复步骤3,直到左子树为空;
  5. 记录栈顶的指针和深度,当叶子节点时,更新最小深度;
  6. 栈顶元素退栈,访问栈顶元素的右子树;
  7. 重复步骤3456,直到栈空且指针为空; ////若右子树为空,则会跳过步骤34,执行步骤6的退栈。

三、AC 代码:

class Solution 
{
public:
    int minDepth(TreeNode* root) 
    {
        if(root==NULL) return 0;
        stack<pair<TreeNode*,int>> myStack;
        int depth=0;
        int min=9999;            ///充分大
        TreeNode* p=root;

        while(!myStack.empty()||p!=NULL)
        {
            while(p!=NULL)
            {
                myStack.push(pair<TreeNode*,int>(p,++depth));
                p=p->left;
            }
            p=myStack.top().first;
            depth=myStack.top().second;
            if(p->left==NULL&&p->right==NULL)
            {
                if(min>depth)
                {
                    min=depth;
                }
            }    
            myStack.pop();
            p=p->right;
        }
        return min;
    }
};

范文参考:

适合刚刚入门的朋友的详细视频教程 - 二叉树的最小深度 - 力扣(LeetCode) (leetcode-cn.com)