【发布时间】:2015-04-21 11:21:16
【问题描述】:
这是我在 StackOverFlow 上的第一个问题: 我正在借助《破解密码面试》(第 5 版)一书学习面试, 我正在解决下一个问题:
实现一个函数来检查二叉树是否是二叉搜索树(Q 4.5 pg 86)。
在我们继续之前,我想提醒您二叉搜索树与简单二叉树之间的区别:
二叉搜索树的条件是,对于所有节点,左子节点都小于或等于当前节点,即小于所有右节点。
因此,本书提供的解决方案之一是使用按顺序遍历并动态扫描树,以检查我们访问的每个节点是否大于最后一个节点,并假设树不能有重复价值观:
public static int last_printed = Integer.MIN_VALUE;
public static boolean checkBST(TreeNode n) {
if(n == null) return true;
// Check / recurse left
if (!checkBST(n.left)) return false;
// Check current
if (n.data <= last_printed) return false;
last_printed = n.data;
// Check / recurse right
if (!checkBST(n.right)) return false;
return true; // All good!
}
现在,这里一切都很好,但是书上引用了:
如果您不喜欢使用静态变量,那么您可以调整此代码以使用整数的包装类,如下所示:
Class WrapInt {
public int value;
}
在这里和其他网站上阅读了包装类之后,我无法得出结论,为什么以及如何在这里使用包装类而不是静态变量?
【问题讨论】:
标签: java static binary-tree binary-search-tree wrapper