leetcode刷題筆記 二叉樹6

2021-10-05 02:52:47 字數 2363 閱讀 6043

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

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

例如,給出

前序遍歷 preorder =[3

,9,20

,15,7

]中序遍歷 inorder =[9

,3,15

,20,7

]

返回如下的二叉樹:

3

/ \ 9

20/ \

157

這是我們資料結構學習二叉樹必考的題型之一,但我們這次需要程式設計做出,那麼讓我們回憶一下我們如何用手推算這道題,並且寫好遞迴三個條件:

遞迴終止條件:前序遍歷陣列中為空

每次遞迴做什麼:根據前序遍歷的preorder[i]在中序遍歷陣列中找對應元素,並以preorder[i]把中序遍歷陣列分為左子樹和右子樹部分,preorder[i]自己則作為這一層的根節點。

返回什麼:返回根節點

根據這個思路,這道題解出並不困難:

class

solution

:def

buildtree

(self, preorder: list[

int]

, inorder: list[

int])-

> treenode:

if preorder==

:return

root_ind=inorder.index(preorder[0]

) root=treenode(preorder[0]

) root.left=self.buildtree(preorder[

1:root_ind+1]

,inorder[

0:root_ind]

) root.right=self.buildtree(preorder[root_ind+1:

],inorder[root_ind+1:

])return root

這個解法中唯一讓人感到比較困惑的可能就是這個preorder[1:root_ind+1],因為這樣看來這個陣列的preorder[0]會永遠不變,但是仔細想想,preorder[1:root_ind+1]的[1:root_ind』+1],不就是preorder[2:root_ind』+1]嗎,所以preorder[0]還是在變化的。

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

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

例如,給出

中序遍歷 inorder =[9

,3,15

,20,7

]後序遍歷 postorder =[9

,15,7

,20,3

]

返回如下的二叉樹:

3

/ \ 9

20/ \

157

這個題思路與上面一題類似,但是要從postorder的最後乙個數往前數起:

遞迴終止條件:後序遍歷陣列中為空

每次遞迴做什麼:根據後序遍歷的postorder[-1]在中序遍歷陣列中找對應元素,並以postorder[-1]把中序遍歷陣列分為左子樹和右子樹部分,postorder[-1]自己則作為這一層的根節點。

返回什麼:返回根節點

解法如下:

class

solution

:def

buildtree

(self, inorder: list[

int]

, postorder: list[

int])-

> treenode:

if postorder==

:return

none

root_ind=inorder.index(postorder[-1

])root=treenode(postorder[-1

])root.left=self.buildtree(inorder[

0:root_ind]

,postorder[

0:root_ind]

) root.right=self.buildtree(inorder[root_ind+1:

],postorder[root_ind:-1

])return root

這道題的解決**與上面那道相似,有所不同的是要注意postorder[-1]代表最後乙個數,而postorder[root_ind:-1]中則不包括最後乙個數,所以不要錯誤寫成postorder[root_ind:-2]

leetcode刷題筆記 二叉樹5

給定乙個不含重複元素的整數陣列。乙個以此陣列構建的最大二叉樹定義如下 二叉樹的根是陣列中的最大元素。左子樹是通過陣列中最大值左邊部分構造出的最大二叉樹。右子樹是通過陣列中最大值右邊部分構造出的最大二叉樹。通過給定的陣列構建最大二叉樹,並且輸出這個樹的根節點。輸入 3,2,1,6,0,5 輸出 返回下...

leetcode刷題python之二叉樹的層次遍歷

題目 給定乙個二叉樹,返回其按層次遍歷的節點值。即逐層地,從左到右訪問所有節點 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回其層次遍歷結果 3 9,20 15,7 definition for a binary tree node.class treen...

Leetcode刷題226 翻轉二叉樹

翻轉一棵二叉樹。示例 輸入 4 2 7 1 3 6 9 輸出 4 7 2 9 6 3 1 備註 這個問題是受到 max howell 的 原問題 啟發的 谷歌 我們90 的工程師使用您編寫的軟體 homebrew 但是您卻無法在面試時在白板上寫出翻轉二叉樹這道題,這太糟糕了。class soluti...