Android进阶之路Android开发数据结构和算法分析

LeetCode二叉树专题 (8) 二叉树的最小深度

2020-07-15  本文已影响0人  ZSACH
image

题目

给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。

image

解题思路

之前有一道二叉树的最大深度的题目比较类似,那道题是使用递归取左右子树的深度取最大值。

递归解法

那这道题就是相反:取左右子树深度的最小值,通过递归的过程。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public int minDepth(TreeNode root) {
        if(root == null){
            return 0;
        }
        int left = minDepth(root.left) + 1;
        int right = minDepth(root.right) + 1;
        return Math.min(left,right);
}

什么?
这样不对,[2,1]不能通过。应该输出2,但是上面的代码输出了1。
再阅读题目,原来它的要求是到叶子节点的深度,如果只有跟节点是不算作深度的,我们需要怎么改的,大家可以想一想

思考时间

我们可以判断如果没有左右子树,就以其他的子树的深度为准。

public int minDepth(TreeNode root) {
    if (root == null) {
        return 0;
    }
    //以右子树的高度为准
    if (root.left == null && root.right != null) {
        return 1 + minDepth(root.right);
    }
    //以左子树的高度为准
    if (root.right == null && root.left != null) {
        return 1 + minDepth(root.left);
    }

    return 1 + Math.min(minDepth(root.left), minDepth(root.right));
}

迭代解法

这道题也可以使用迭代求解,利用层序遍历记录层数,到达叶子节点的时候,判断得到一个最小的节点即可,自己写下代码把。

上一篇下一篇

猜你喜欢

热点阅读