最近我遇到了一个问题"从给定的Inorder和Preorder遍历中构造树"。我看了源(通过java)。 Construct Tree from given Inorder and Preorder traversals
但有一点我对代码感到困惑,那就是" if(inStrt> inEnd) 返回NULL;",我想知道作者如何看出这不明显的边界条件。
答案 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非常相似,在那里比较低和高指数。