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

2021-10-04 20:46:12 字數 1164 閱讀 6160

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

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

例如,給出

前序遍歷 preorder =[3

,9,20

,15,7

]中序遍歷 inorder =[9

,3,15

,20,7

]

返回如下的二叉樹:

3

/ \ 9

20/ \

157

前序與中序遍歷的序列有乙個特點:

對於某棵樹來講,先序遍歷的序列的長度與中序遍歷的序列的長度是相等的。

對於某棵樹的先序序列來講,分布為:根結點,左子樹,右子樹

對於某棵樹的中序序列來講,分布為:左子樹,根結點,右子樹

所以我們每次都可以根據先序序列的第乙個值取到根結點。然後在中序序列中找到這個根結點,這樣就可以把序列劃分為左子樹和右子樹了。然後分別遞迴的去建立左子樹和右子樹即可。

方法一,copy陣列的方式,特點是**段,易理解。但是由於大量copy陣列,導致效能不是特別好,但是依然可以a過去。(方法一)

我們可以不用copy陣列,設定上限座標和下限座標的方式來搞這個。這個不會copy陣列,效能較高。方法二的難點就是座標的設定,建議畫圖模擬。(方法二)

class

solution

catch

(exception e)

// 建立右子樹

trycatch

(exception e)

//返回根結點

return root;

}private

intgetindex

(int

inorder,

int key)

return-1

;}}

class

solution

private treenode buildtree

(int

preorder,

int[

] inorder,

int leftpre,

int rightpre,

int leftin,

int rightin)

}

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

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

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

如題,根據前序與中序遍歷序列構造二叉樹 整體思路 前序遍歷的第乙個元素,必然是二叉樹的根節點 在中序遍歷中找到前序遍歷第乙個元素的位置 該位置左邊的所有點都是二叉樹的左子樹元素,該位置右邊的所有點都是二叉樹的右子樹元素 思路一 遞迴 字典 由整體思路可以構建子函式用於遞迴,不斷求子樹的左右子樹,直到...

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

根據一棵樹的前序遍歷與中序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7 def buildtree2 preorder,inorder i...