我需要找到二叉树的最小深度。我的代码在以下测试用例上失败:[-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);
}
}
答案 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种情况:
这是代码:
memset(str, 'H', 10000 * n);