根據前序遍歷,中序遍歷結果構造二叉樹

2021-10-03 19:39:14 字數 1115 閱讀 7033

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

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

例如:

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

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

在前序遍歷結果中可以找到:這棵樹的根 為 3;

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

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

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

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

left right

1.從前序遍歷中找根;

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

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

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

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

class

solution

treenode root=

newtreenode

(preorder[index]);

int inrootidx=left;

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

while

(inrootidx<=right)

inrootidx++;}

index++

;//遞迴構造左子樹

root.left=

buildtree

(preorder,inorder,left,inrootidx-1)

;//遞迴構造右子樹

root.right=

buildtree

(preorder,inorder,inrootidx+

1,right)

;return root;

}public treenode buildtree

(int

preorder,

int[

] inorder)

}

根據前序遍歷和中序遍歷得出後序遍歷

首先要明確前序,中序和後序的遍歷順序 前序 父節點,左子節點,右子節點 中序 左子節點,父節點,右子節點 後序 左子節點,右子結點,父節點 明確之後,首先根據前序遍歷,確定整個二叉樹的根節點 前序的第乙個節點 再通過中序遍歷,可以直接根據根節點將整個二叉樹分為左右兩顆子樹.這時再逐步根據前序和中序順...

根據前序遍歷和中序遍歷樹構造二叉樹

根據前序遍歷和中序遍歷樹構造二叉樹.樣例給出中序遍歷 1,2,3 和前序遍歷 2,1,3 返回如下的樹 2 1 3 假設樹中不存在相同數值的節點 definition of treenode class treenode class solution treenode helper vector p...

C 根據 前序 中序遍歷輸出後序遍歷

include include void printt char pred,int pre start,int pre end,char inod,int in start,int in end intmain void printt char pred,int pre start,int pre ...