Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
111. 二叉树的最小深度 - 力扣(LeetCode) (leetcode-cn.com)
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
示例 1:
输入: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
二、思路分析:
- 若根为空,返回最大深度为0;
- 若根非空,<根,深度为1>入栈;
- 若左子树非空,访问左子树,<左子树,++深度>入栈;
- 重复步骤3,直到左子树为空;
- 记录栈顶的指针和深度,当叶子节点时,更新最小深度;
- 栈顶元素退栈,访问栈顶元素的右子树;
- 重复步骤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)