【发布时间】:2016-02-10 23:32:21
【问题描述】:
我正在研究 Java 中的数据结构(目前是树)。 我有一个函数可以确定一棵树是否是有效的 BST。 该功能正常运行,但我无法理解它是如何运行的。 函数如下:
//call from Main method
boolean isBST = theTree.isValidBST(theTree.root);
System.out.println("isBST??" +isBST);
//actual method body
public boolean isValidBST(Node root) {
return isValidBST(root, Integer.MIN_VALUE, Integer.MAX_VALUE);
}
public boolean isValidBST(Node focusNode, int min, int max){
if(focusNode==null)
return true;
System.out.println("Comparing "+focusNode.key+ " with "+min+" min value ");
System.out.println("Comparing "+focusNode.key+ " with "+max+" max value ");
if(focusNode.key <= min || focusNode.key >= max)
return false;
return isValidBST(focusNode.leftChild, min, focusNode.key) && isValidBST(focusNode.rightChild, focusNode.key, max);
}
上述函数的输出是:
Comparing 50 with -2147483648 min value
Comparing 50 with 2147483647 max value
Comparing 25 with -2147483648 min value
Comparing 25 with 50 max value
Comparing 15 with -2147483648 min value
Comparing 15 with 25 max value
Comparing 30 with 25 min value
Comparing 30 with 50 max value
Comparing 75 with 50 min value
Comparing 75 with 2147483647 max value
Comparing 85 with 75 min value
Comparing 85 with 2147483647 max value
isBST??true
现在谁能解释一下这里的执行过程是怎样的? 如何对函数进行嵌套(递归)调用? 我缺乏对递归函数调用的理解。如果有人能让我理解这段代码,我将能够解决许多与树相关的递归问题。寻找一些帮助。 非常感谢。
【问题讨论】:
-
这是一个相当广泛的问题......
-
你是在问递归函数是如何工作的吗?
-
你能说得更具体点吗?该代码的哪一部分让您感到困惑?你了解函数调用的工作原理吗?
-
@RileyCarney 范围很广,但是如果一个好的java deeloper理解它,他可以用简短的段落解释它的工作。
-
@SpencerBrett 是的,我确实知道非递归函数调用工作。你能解释一下最后一条语句的执行过程中断吗?isValidBST(focusNode.leftChild, min, focusNode.key) && isValidBST(focusNode.rightChild, focusNode.key, max);
标签: java debugging recursion tree binary-search-tree