根據後序遍歷和中序遍歷結果構造二叉樹

2021-10-03 19:41:17 字數 1206 閱讀 6987

後序遍歷的特點:左子樹–右子樹–根節點

中序遍歷的特點:左子樹–根節點–右子樹

例如:

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

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

在後序遍歷結果中可以找到:這棵樹的根 為 3(index=postorder.length-1);

再去中序中,可以分辨出9為3的左子樹內容,15、20、7為3的右子樹內容;

遞迴構造3的右子樹,3的左子樹。

這裡先構造右子樹是因為:

從後序遍歷結果陣列的末尾開始構造樹,

所以先拿到根節點,然後是右子樹,最後是左子樹。

注意一定要給出子樹的範圍區間。

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

left right

1.從後序遍歷中找根;

2.在中序遍歷結果中找根的位置inrootidx,

右子樹的所有節點區間【inrootidx+1,,right】;

左子樹的所有節點區間【left,inrootidx-1】;

3.遞迴建立右子樹和左子樹。

class

solution

treenode root=

newtreenode

(postorder[index]);

int inrootidx=left;

//在中序結果中找到個=根節點下標

while

(inrootidxinrootidx++;}

index--

;//遞迴構造右子樹

root.right=

buildtree

(inorder,postorder,inrootidx+

1,right)

;//遞迴構造左子樹

root.left=

buildtree

(inorder,postorder,left,inrootidx)

;return root;

}public treenode buildtree

(int

inorder,

int[

] postorder)

}

根據後序和中序遍歷輸出先序遍歷

本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。輸入格式 第一行給出正整數nn le 30 30 是樹中結點的個數。隨後兩行,每行給出nn個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。輸出格式 在一行中輸出preorder 以...

根據後序和中序遍歷輸出先序遍歷

本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。第一行給出正整數n 30 是樹中結點的個數。隨後兩行,每行給出n個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。在一行中輸出preorder 以及該樹的先序遍歷結果。數字間有1個空...

根據後序和中序遍歷輸出先序遍歷

n 是樹中結點的個數。隨後兩行,每行給出 n個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。7 2 3 1 5 7 6 4 1 2 3 4 5 6 7preorder 4 1 3 2 6 5 7 思路 一.根據後序遍歷和中序遍歷建樹 1.二叉鍊錶結構的定義 ...