最近我遇到了一個問題「從給定的Inorder和Preorder遍歷構造樹」。並且我看了源代碼(由java)。 Construct Tree from given Inorder and Preorder traversals如何理解遞歸邊界條件?
但有一點我的代碼是如此混亂,那就是「如果(inStrt> inEnd) 返回NULL;」我想知道作者是怎麼想的出來這不是很明顯的邊界條件。
最近我遇到了一個問題「從給定的Inorder和Preorder遍歷構造樹」。並且我看了源代碼(由java)。 Construct Tree from given Inorder and Preorder traversals如何理解遞歸邊界條件?
但有一點我的代碼是如此混亂,那就是「如果(inStrt> inEnd) 返回NULL;」我想知道作者是怎麼想的出來這不是很明顯的邊界條件。
在buildTree()
每次遞歸調用,通過in[]
表示的序序列被有效地分割成兩個子序列,一個子序列爲屬於父和其他子序列的左側爲屬於節點的節點在父母的右邊。 (原始序列沒有物理上劃分,而是索引傳遞到buildTree()
以反映子序列。)
截至鏈接頁面,in = [D, B, E, A, F, C]
的頂部的實例給出的,並且由於是A
根,in_left = [D, B, E]
和in_right = [F, C]
。因此inStr
和inEnd
索引傳遞到buildTree()
以反映這些子序列將是(0, 2)
和(4, 5)
。
那麼inStr > inEnd
是什麼意思?簡而言之,沒有孩子節點了,所以我們可以在那裏停下來。
「遞歸邊界條件」實際上與Quicksort非常相似,其中比較了低位和高位指數。