层序遍历的应用:
移步->LeetCode 111. 二叉树的最小深度
移步->LeetCode 104. 二叉树的最大深度
移步->LeetCode 102. 二叉树的层序遍历
移步->LeetCode 226. 翻转二叉树
递归法思路:
注意这里有一个陷阱。
上图,左子树为空,最小深度不是1而是2(红线部分)
定义最小深度是指根节点到叶子节点之间的距离,主要分为两种情况
- 左子树空,右子树不空,返回右子树最小深度+1
- 右子树空,左子树不空,返回左子树最小深度+1
最后返回其他情况,左右子树深度的最小值+1
//递归
class Solution{
public int minDepth(TreeNode root){
if(root==null) return 0;
TreeNode left = root.left;
TreeNode right = root.right;
if(left == null && right!=null){
return minDepth(right)+1;
}
if(left!=null && right==null){
return minDepth(left)+1;
}
return Math.min(minDepth(left),minDepth(right))+1;
}
}
迭代法思路:
采用层序遍历,到当前节点时左右孩子均为空时,说明到达了最低点,返回深度即可。
class Solution {
public int minDepth(TreeNode root) {
int depth = 0;
if(root == null) return depth;
Queue<TreeNode> que = new LinkedList<TreeNode>();
que.offer(root);
while(!que.isEmpty()){
int len = que.size();
depth++;
while(len>0){
TreeNode curNode = que.poll();
if(curNode.left==null&&curNode.right==null) return depth;
if(curNode.left!=null) que.offer(curNode.left);
if(curNode.right!=null) que.offer(curNode.right);
len--;
}
}
return depth;
}