【发布时间】:2015-07-21 06:07:25
【问题描述】:
问题是我需要编写一个函数来验证二叉树是否是有效的二叉搜索树
这是我的代码:
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 对上一个堆栈调用具有实际值。
感谢您的帮助。
【问题讨论】:
-
覆盖'WrapInt'类的克隆,然后在每次递归调用验证方法时尝试传递'lastData'对象的克隆。
标签: java recursion binary-search-tree