Java 无法按升序对二叉树的叶子进行排序
因此,最初的问题是编写方法chechklaves,如果树的叶子按递增顺序排序,它应该返回true,否则返回false。您可以假设所有内部节点的数据都为空。您会发现,为这个问题定义其他递归帮助器方法很有用 编辑:我的代码现在正在运行,但是如何修改代码,以便将val作为参数而不是全局变量传入Java 无法按升序对二叉树的叶子进行排序,java,recursion,Java,Recursion,因此,最初的问题是编写方法chechklaves,如果树的叶子按递增顺序排序,它应该返回true,否则返回false。您可以假设所有内部节点的数据都为空。您会发现,为这个问题定义其他递归帮助器方法很有用 编辑:我的代码现在正在运行,但是如何修改代码,以便将val作为参数而不是全局变量传入 static int val = 0; static public boolean checkLeaves(Node root) { // int val = 0;
static int val = 0;
static public boolean checkLeaves(Node root) {
// int val = 0;
if(root.data != 0 ) {
if(root.data > val) {
val = root.data;
return true;
} else {
return false;
}
} else {
return checkLeaves(root.left) && checkLeaves(root.right);
}
}
在没有全局变量的情况下,实际上没有一种方法可以通过比较遍历树叶。这是通过引用传递可以实现的,但是Java没有这样的特性。因此,您有两种选择: 选项1使用此静态变量 选项2将val设为数组参数,如下所示:
private static public boolean checkLeaves(Node root, int[] val) {
if (root.data != 0) {
if (root.data > val[0]) {
val[0] = root.data;
return true;
} else {
return false;
}
} else {
return checkLeaves(root.left, val) && checkLeaves(root.right, val);
}
}
并称之为:
checkLeaves(root, new int[] { Integer.MIN_VALUE });
通过将其设置为数组,可以模拟通过引用传递的行为。也就是说,通过引用原始值来更新变量的原始值。Java中的一切都是按值传递的,因此变量的值传递给参数,而不是参数的引用
笔记
我建议您将变量命名为更具描述性的名称。例如,您可以将其命名为previousLeafValue或其他名称,而不是val
此外,要遵循的一个好习惯是尽可能地将所有事情保密。在选项2中,您可以看到我的代码具有带有私有访问修饰符的方法。静态变量也是如此。养成一种习惯,习惯性地将事物私有化,然后根据需要扩展它们的修饰语。但它不起作用。请更具体一点-它是否给出了错误的结果,是否给出了错误消息,是无限循环,还是其他什么?您需要给出完整的细节,包括您正在测试的输入和您期望的输出。另请参见如何编写。请立即阅读我的编辑。您的全局变量未被使用。您可以删除它,代码的行为也将相同。这是因为你在参数中的整数val无论如何都在隐藏该变量。它实际上做的是相反的,当我保留实例变量时,它没有给我正确的解决方案。你考虑过这个问题吗?您可以假设所有内部节点的数据都为空。。您的代码似乎假定node.data是int类型,而不是引用类型。感谢您的帮助!最后一件事,我需要在二进制搜索树中为延迟删除编写findMin的帮助,但无法找到解决方案。@user11452926-1这与您提出的问题不同。我需要帮助不是问题。