我试图在leetcode上做平衡树问题,只有当左子树的高度-右子树的高度<=1时,才返回true。为什么左子树的深度返回2,而它应该返回4?有什么我解释错了吗?我在底部贴了一张树的照片。
输入:[1,2,2,3,3,空,空,4,4,空,空,5,5]
输出:true(因为左子树返回的是2而不是4)
预期输出:false
打印报表:
左子树:2
右子树:1
结果:1(左子树-右子树)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean isBalanced(TreeNode root) {
// 1 2 2 3 3 4 4
//
if (root == null) return true;
System.out.println("left subtree: " + findDepth(root.left,1));
System.out.println("right subtree: " + findDepth(root.right,1));
System.out.println("result: " + Math.abs(findDepth(root.left,1) - findDepth(root.right, 1)));
if ( Math.abs(findDepth(root.left,1) - findDepth(root.right, 1)) <= 1) return true;
return false;
}
public static int findDepth(TreeNode root, int count) {
if (root == null) return count;
if (root.left != null) {
count++;
findDepth(root.left, count);
}
if(root.left == null && root.right == null) return count;
return count;
}
}
二叉树图像
2条答案
按热度按时间9lowa7mx1#
得到2的原因是,当您递归时,递归调用不会增加
count
您传入的变量。相反,它会增加自己的副本。java是按值传递的。因此,递归调用实际上什么都不做。您甚至没有使用它的返回值。它的返回值实际上是
count
你想要的count
要设置为,所以要解决此问题,请设置count
到的返回值findDepth
:这将为您提供预期的4,但您的
findDepth
还应检查正确的子树,并可通过其他方式进行改进。例如,您实际上不需要count
论点46qrfjad2#
因为你只是在计算树左边的深度
findDepth
应用条件法您可以这样修改您的方法