從中序與後序遍歷序列構造二叉樹

2021-09-25 08:27:16 字數 1218 閱讀 2499

根據一棵樹的中序遍歷與後序遍歷構造二叉樹。

注意:

你可以假設樹中沒有重複的元素。

例如,給出

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

後序遍歷 postorder = [9,15,7,20,3]

返回如下的二叉樹:

3

/ \9 20

/ \

15 7

因為後序遍歷的順序是(左,右,根),最後乙個節點總是根節點,而中序遍歷的順序是(左,根,右),我們可以先根據根節點將中序遍歷分為左、右兩棵子樹,再分別遞迴地處理他們。

重點是怎麼正確的把陣列分開。這個看注釋吧~

/**

* definition for a binary tree node.

* public class treenode

* }*/class

solution

public treenode buildtree

(int inl,

int inr,

int postl,

int postr)}if

(find)

break;}

int pivot = inorder[i]

;// 因為 i是根節點的索引,將 [inl, inr)拆分成 [inl, i)左子樹,[i+1, inr)右子樹

// 因為 j是根節點的索引,所以左右子樹都在根節點的左邊,將 [postl, postr)縮至 [postl, j)

// 注意 j-1的值不一定在拆分的inorder陣列內,畢竟 [inl, i)左子樹,[i+1, inr)右子樹都是 [postl, j)的子集

// 所以有上面的遍歷,從j往前倒序遍歷,第乙個在inorder的陣列內的一定是根節點

treenode root =

newtreenode

(pivot)

; root.left =

buildtree

(inl, i, postl, j)

; root.right =

buildtree

(i +

1, inr, postl, j)

;return root;

}}

從中序與後序遍歷序列構造二叉樹

根據一棵樹的中序遍歷與後序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 中序遍歷 inorder 9,3,15,20,7 後序遍歷 postorder 9,15,7,20,3 返回如下的二叉樹 3 9 20 15 7 definition for a binary tree nod...

從中序與後序遍歷序列構造二叉樹

根據一棵樹的中序遍歷與後序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 中序遍歷 inorder 9,3,15,20,7 後序遍歷 postorder 9,15,7,20,3 返回如下的二叉樹 3 9 20 15 7 definition for a binary tree nod...

從中序與後序遍歷序列構造二叉樹 二叉樹

根據一棵樹的中序遍歷與後序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 中序遍歷 inorder 9,3,15,20,7 後序遍歷 postorder 9,15,7,20,3 得到結果 3,9,20,null,null,15,7 二叉樹的後序遍歷最後乙個元素是二叉樹的的根節點,然後...