查找二叉树的最小深度

时间:2019-07-11 13:16:39

标签: java binary-tree

我需要找到二叉树的最小深度。我的代码在以下测试用例上失败:[-9, -3, 2, null, 4, 4, 0, -6, null, -5]

  

给出一棵二叉树,找到其最小深度示例:

     

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

    3
   / \
  9  20
    /  \
   15   7
     

返回其最小深度= 2。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {

    public int count(TreeNode root) { 
        if (root == null) {
            return 0;
        }

        return 1 + Math.max(count(root.left), count(root.right));
    }

    public int minDepth(TreeNode root) {
        int left = 0, right = 0;

        if (root == null) {
            return 0;
        }

        if (root.right == null) {
           return  1 + count(root.left);
        }      

        if (root.left == null) {
            return  1 + count(root.right);
        }

        left = count(root.left);
        right = count(root.right);

        return  1 + Math.min(left, right);
    }
}
  • 输出= 4
  • 期望= 3

2 个答案:

答案 0 :(得分:0)

我认为问题在于使用Math.max而不是Math.min

public int minDepth(TreeNode root)
{

    if(root == null)
        return 0;

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

答案 1 :(得分:0)

这里的辅助函数似乎有些过分;将所有逻辑整合到一个函数中并传递到堆栈上会比较容易。

有3种情况:

  • 如果此节点为空,则返回0。
  • 如果没有子代,则此节点为叶。返回1。
  • 如果有左子和/或右子,则此节点为内部节点。递归计算任何当前子级的最小深度,并加1来计数当前节点。如果缺少左孩子或右孩子,我们将通过将其最小值合并为无穷大来忽略它。

这是代码:

memset(str, 'H', 10000 * n);