leetcode 111、、Minimum Depth of a Binary Tree、难度easy
0. 题干
// 根结点(root)是树的一个组成部分,也叫树根。所有非空的二叉树中,都有且仅有一个根结点简介。
//它是同一棵树中除本身外所有结点的祖先,没有父结点。
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
返回它的最小深度 2.
1. 代码
class Solution {
public:
int minDepth(TreeNode* root) {
queue<TreeNode*>q; //创建队列q
int level= 0; //level为深度
if (root)
q.push(root);
while(q.size()) {
level++;
int n = q.size();
for (int i = 0; i< n; i++) {
TreeNode* cur = q.front();
q.pop();
if( !cur->left && !cur->right) //如果根结点的左右孩子都不存在,那么直接深度
return level;
if(cur->left)
q.push(cur->left);
if(cur->right)
q.push(cur->right);
}
}
return level;
}
};
2. 简叙思路
代码比较简单,稍微说下思路;
以 给定二叉树 [3,9,20,null,null,15,7] 为例:
先存根节点到队列q里面,其值为3,q.size()为1,然后把存到队列里面的根节点pop掉;
依次存放结点值为9和20的结点,q.size()值为2,然后发现值为9的结点的左右孩子都没有;
此时就找到了最小深度,level返回2。