zoukankan      html  css  js  c++  java
  • 二叉树最小深度(递归版)

    题目:

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

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

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

    示例:

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

  • 相关阅读:
    IntelliJ IDEA 14.03 java 中文文本处理中的编码格式设置
    应聘感悟
    STL string分析
    CUDA SDK VolumeRender 分析 (1)
    BSP
    CUDA SDK VolumeRender 分析 (3)
    CUDA SDK VolumeRender 分析 (2)
    Windows软件发布时遇到的一些问题
    Ten Commandments of Egoless Programming (转载)
    复习下光照知识
  • 原文地址:https://www.cnblogs.com/wxdmw/p/13279116.html
Copyright © 2011-2022 走看看