问题是我需要编写一个函数来验证二叉树是否是有效的二叉搜索树

这是我的代码:

public static boolean betterValidBSTArray(TreeNode node) {
    WrapInt lastData = null;
    return validate(lastData, node);
}

private static boolean validate(WrapInt lastData, TreeNode node) {
    if(node == null) return true;
    if(!validate(lastData, node.getLeft())) return false;
    if(lastData != null && node.getData() <= lastData.value) return false;
    if(lastData == null) lastData = new WrapInt();
    lastData.value = node.getData();
    if(!validate(lastData, node.getRight())) return false;

    return true;
}

class WrapInt { int value; }


问题是,该算法无法正常工作。我放置了一些断点,并弄清楚对于每个堆栈调用,在堆栈调用完成后为lastData分配一个值之后,上一个堆栈调用将以lastData = null继续,即使lastData对于上一个堆栈调用也具有实际值。

感谢您的任何帮助。

最佳答案

要修复代码,您不应该执行if(lastData == null) lastData = new WrapInt();,因为它只会将对新对象的引用分配到方法调用参数中,该参数是每个堆栈调用的局部变量,并且您不应将null传递为lastData,而应传递一个对象它将在整个递归中使用,仅更改其value

关于java - Java对象无法通过递归通过ref传递,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31531506/

10-10 16:38