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


    题目:

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

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

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

    示例:

    给定二叉树 [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... ...

  • 相关阅读:
    4.24成果(冲刺1.7)
    4.23成果(冲刺1.6)
    4.22成果(冲刺1.5)
    4.21成果(冲刺1.4)
    4.20成果(冲刺1.3)
    4.19成果(冲刺1.2)
    4.18成果(冲刺1.1)
    计划会议
    需求评审
    电梯演讲
  • 原文地址:https://www.cnblogs.com/wxdmw/p/13279116.html
Copyright © 2020-2023  润新知