二叉树?最小深度!
题目:
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
例子:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最小深度 2.
题目描述
- 目标:根结点到最近的叶子结点结点数量
- 把所有根结点到叶子结点的所有路径的节点数
- 找出最少结点数
思路解析
变量 | 作用 |
---|---|
find() | 寻找路径函数 |
过程
- 当前结点 ⇒ 路径结点数+1
- 如果到达叶子结点 ⇒ 说明找到一条路径 ⇒ 节点数加入ans
- 如果左孩子结点不为空 ⇒ 更新当前结点为左孩子结点
- 如果右孩子结点不为空 ⇒ 更新当前结点为右孩子结点
- 寻找结点数最小
代码如下
void find(TreeNode*root, int depth,vector<int> &ans)
{
depth++; #当前路径节点数 +1
if(!root->left&&!root->right) ans.push_back(depth); #寻找到路径 节点数加入ans
if(root->left) find(root->left,depth,ans); #寻找左孩子到叶子结点的路径
if(root->right) find(root->right,depth,ans); #寻找右孩子到叶子结点的路径
}
class Solution {
public:
int minDepth(TreeNode* root) {
if(!root) return 0;
vector<int> ans;
int depth = 0;
find(root,depth,ans);
int min = 100000;
for(int i = 0; i < ans.size(); i++)
if(min > ans[i]) min = ans[i]; #寻找最小结点数
return min;
}
};