为什么我的代码不起作用?它在GFG的600个案件中通过了8个。问题是"leaf at same level"



我的方法是这样的-我使用数组列表。我检查了二叉树的所有节点,找到那些左节点和右节点为空的节点,这意味着它们是叶节点,然后我找到它们的级别并将它们添加到数组列表中。

之后,我在函数布尔检查中使用Arraylist来检查数组列表中的所有元素是否相同,如果它们是,我返回true(所有叶子都在同一级别),否则我返回false。

class Solution {
boolean check(Node root) {
int c = 0;
ArrayList<Integer> a = new ArrayList<>();
for (int x : a) {
if (x != (a.get(0)))
return false;
}
return true;
}
public void che(Node root, int level, ArrayList<Integer> a) {
if (root == null) return;
if (root.left == null && root.right == null) {
a.add(level);
}
che(root.right, level + 1, a);
che(root.left, level + 1, a);
}
}

这是问题的链接

永远不调用che函数。

然而,没有必要在数组列表中收集数据。相反,让递归函数返回调用它的子树的高度。在同一个函数中,比较左子树和右子树返回的高度。如果他们是不同的,返回一个值,该值表示失败(如2),否则返回普通身高+ 1。

这允许函数在发现高度差时立即中止搜索,避免不必要地遍历树的其余部分。

如下所示:

class Solution
{
boolean check(Node root) {
return height(root) > -2;
}
private int height(Node root) {
if (root == null) return -1;
int left = height(root.left);
if (left == -2) return -2;
int right = height(root.right);
if (left == -1 || right == -1 || left == right) {
return 1 + Math.max(left, right);
}
return -2;
}
}

相关内容

最新更新