【发布时间】:2017-09-05 16:02:09
【问题描述】:
因为要很好地学习递归思想背后的逻辑,所以我在使用调试器学习数据结构的同时进行练习。这个问题可能看起来很简单,但它只是引起轰动。该方法在二叉搜索树中找到最大元素。 - 通常,二叉搜索树(完整实现为click here)是一棵树,其中左孩子的元素少于根元素,右孩子的元素比根元素多。 - 在找到它之前,该方法会进入新的激活帧并将其推送到堆栈顶部。找到后,它们会以相反的顺序 (LIFO) 弹出。我的问题是,为什么该方法返回第二条语句(return findMax(node.right))?如果调试器显示激活帧被弹出,为什么它只显示一次?我希望图片也有助于更好地理解我的问题。
/* bST.add(1),bST.add(3),bST.add(7),bST.add(6),bST.add(4),
bST.add(13),bST.add(14),bST.add(10),bST.add(8); */
/**
* Find max element in the BST
* @param node local node being given
* @return max element
*/
public E findMax(Node<E> node) {
if (node.right == null)
return node.data;
return findMax(node.right);
}
【问题讨论】:
-
最后一张截图
node是 13,之前是 14。您需要检查调用堆栈。你很可能不在同一个方法调用中 -
(((Watch))) out please@Flikk
-
查看您的堆栈跟踪。在
node.right为空之后,您只会倒退。不知道为什么调试器会跳过堆栈跟踪的其余部分。不与 IntelliJ 合作也许“强制步入”会对您有所帮助。或者当你倒退时“走出去”
标签: java recursion data-structures binary-search-tree