二叉樹構建 遞迴

2021-10-20 07:44:34 字數 1123 閱讀 5689

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。

例如,給出

前序遍歷 preorder = [3,9,20,15,7]

中序遍歷 inorder = [9,3,15,20,7]

返回如下的二叉樹:

限制:0 <= 節點個數 <= 5000

本次使用遞迴思路

二叉樹的構建思路是前序遍歷的順序就是檢測的核心,檢測前序遍歷的首位等於中序建立的哪一位,哪一位就是根節點。

前序遍歷的位數和中序遍歷到根的位數相同,例如前序3,9,中序9,3,3為根節點,9及為左側,中序遍歷3右側的即為根右側的。

然後檢測左右兩側即可。

//賦值為本根的值

i :=

0for

; i <

len(preorder)

; i++

} root.left =

buildtree

(preorder[1:

len(inorder[

:i])+1

], inorder[

:i])

root.right =

buildtree

(preorder[

len(inorder[

:i])+1

:], inorder[i+1:

])return root

}//treenode is treenode

type treenode struct

構建二叉樹 遍歷二叉樹

陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...

構建二叉樹

前序遍歷構建二叉樹是根據根節點 左節點 右節點的方式輸入資料,針對乙個節點來說,首先輸入的是根節點,根節點之後的數值應該是其左子節點,之後是右節點,如果是遞迴,則首先是一直設定左節點,之後再依次設定右節點。之前在看二叉樹過程中,見過最多的是輸入個位數字構建二叉樹,今天看到乙個可以輸入多個數字的輸入方...

二叉樹遞迴

我們來看一下二分搜尋樹的釋放,這就是乙個典型的遞迴問題 function destroy node 這個遞迴包括兩個部分,乙個是遞迴終止條件,乙個是遞迴的執行。我們知道遞迴是不斷地將當前函式壓入函式棧,如果沒有if node null return這個終止條件,當函式棧被壓滿之後就會發生棧溢位 棧的...