问题是我需要编写一个函数来验证二叉树是否是有效的二叉搜索树
这是我的代码:
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/