從中序與後序遍歷序列構造二叉樹(遞迴實現)

2021-10-09 15:52:21 字數 1493 閱讀 6025

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

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

例如,給出

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

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

返回如下的二叉樹:

1、遞迴思路

/**

* definition for a binary tree node.

* public class treenode

* }*/class

solution

return

buildtree

(map,

0, inlen -

1, postorder,

0, postlen -1)

;}/** *

* @param map 後序遍歷hash(key為節點值,value為下標)

* @param inleft 樹中序遍歷開始下標

* @param inright 樹中序遍歷結束下標

* @param postorder 後序遍歷

* @param postleft 樹後序遍歷開始下標

* @param postright 樹後序遍歷結束下標

* @return

*/public treenode buildtree

(map

map,

int inleft,

int inright,

int[

] postorder,

int postleft,

int postright)

// 根節點值

int pivot = postorder[postright]

;// 構建目標樹

treenode root =

newtreenode

(pivot)

;// 獲取根節點在中序遍歷中的下標

int pivotindex = map.

get(pivot)

;// 構建左子樹

root.left =

buildtree

(map, inleft, pivotindex -1,

postorder, postleft, postleft +

(pivotindex - inleft)-1

);// 構建右子樹

root.right =

buildtree

(map, pivotindex +

1, inright,

postorder, postleft +

(pivotindex - inleft)

, postright -1)

;return root;

}}

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

根據一棵樹的中序遍歷與後序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 中序遍歷 inorder 9,3,15,20,7 後序遍歷 postorder 9,15,7,20,3 返回如下的二叉樹 3 9 20 15 7因為後序遍歷的順序是 左,右,根 最後乙個節點總是根節點,而中序遍...

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

根據一棵樹的中序遍歷與後序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 中序遍歷 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...