如何理解递归边界条件?

时间:2017-03-21 04:48:49

标签: algorithm binary-tree

最近我遇到了一个问题"从给定的Inorder和Preorder遍历中构造树"。我看了源(通过java)。 Construct Tree from given Inorder and Preorder traversals

但有一点我对代码感到困惑,那就是" if(inStrt> inEnd)      返回NULL;",我想知道作者如何看出这不明显的边界条件。

1 个答案:

答案 0 :(得分:0)

buildTree()的每次递归调用中,由in[]表示的顺序序列被有效地分成两个子序列,一个子序列用于属于父节点左侧的节点,另一个子节点属于父节点左侧属于父级右侧的节点的子序列。 (原始序列不是物理上划分的,而是将索引传递到buildTree()以反映子序列。)

如链接页面顶部的示例中所示,in = [D, B, E, A, F, C],而A是root,in_left = [D, B, E]in_right = [F, C]。因此,传递到inStr的{​​{1}}和inEnd索引将反映这些子序列buildTree()(0, 2)

那么(4, 5)是什么意思?简单地说,没有儿童节点,所以我们可以在那里停止。

"递归边界条件"与Quicksort非常相似,在那里比较低和高指数。