二叉树最小深度(递归版)

题目:

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明: 叶子节点是指没有子节点的节点。

示例:

给定二叉树 [3,9,20,null,null,15,7],

    3
   / 
  9  20
    /  
   15   7

返回它的最小深度  2.

分析:

我最初的思路是递归所有节点,节点不为null则加1,然后return当前节点左子树和右子树中长度较小的那个,如果节点为null,则return上一个节点递归时计算出的深度,但是这种想法存在着严重的缺陷。

当某个节点只有一个子节点时,会导致程序返回当前节点的深度。但实际上当前节点并不是叶子节点,这就很气了!为了修正这个bug,我采用如下的方案:

代码:

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

    public int minDeep(TreeNode root, int sum) {
        if (root != null) {
            sum++;
        }
        if (root == null) {
            return Integer.MAX_VALUE;
        }
        if (root.left == null && root.right == null) {
            return sum;
        }
        return Math.min(minDeep(root.left, sum), minDeep(root.right, sum));
    }
}

也就是当某个节点只有一个子节点时,为null的一侧会返回一个其他数值绝对无法超越的值(因为最终返回值为int),导致自己的深度被其他深度淘汰掉。

但是,这样写总觉得不太好,有一种很牵强的感觉,后来看了其他人的答案... ...日常觉得自己菜ing... ...

原文地址:https://www.cnblogs.com/wxdmw/p/13279116.html