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