給定乙個不含重複元素的整數陣列。乙個以此陣列構建的最大二叉樹定義如下:
二叉樹的根是陣列中的最大元素。
左子樹是通過陣列中最大值左邊部分構造出的最大二叉樹。
右子樹是通過陣列中最大值右邊部分構造出的最大二叉樹。
通過給定的陣列構建最大二叉樹,並且輸出這個樹的根節點。
輸入:[3,
2,1,
6,0,
5]輸出:返回下面這棵樹的根節點:
6/ \
35 \ /
20
\1
這道題主體思路就是遞迴,我們可以看出,本質操作就是把乙個陣列不斷分割,並把其中部分的最大值分配給相應的節點,這裡我們解釋一下遞迴三部曲:
遞迴終止條件?當左子樹和右子樹的陣列都為空時
本次遞迴做什麼?取出陣列的最大值,並把陣列根據最大值分成左右兩個陣列,然後進行遞迴賦值
返回什麼?子樹的根節點
每次遞迴前分析一下這三點,就可以對於遞迴的框架有大概的了解。
此外,這題還有乙個以前不常接觸的點,那就是建立二叉樹並返回節點:
首先,我們從構建樹的建構函式說起,我們需要定義這麼乙個類:
class
treenode
:def
__init__
(self, x)
: self.val = x
self.left =
none
self.right =
none
顯而易見,我們可以通過root = treenode(max_num) 這樣的方式來建立乙個根節點,這也正是下面解題過程的核心:
class
solution
:def
constructmaximumbinarytree
(self, nums: list[
int])-
> treenode:
iflen
(nums)==0
:return
none
max_num =
max(nums)
max_index = nums.index(max_num)
root = treenode(max_num)
root.left = self.constructmaximumbinarytree(nums[
0:max_index]
) root.right = self.constructmaximumbinarytree(nums[max_index+1:
])return root
給定乙個二叉搜尋樹,同時給定最小邊界l 和最大邊界 r。通過修剪二叉搜尋樹,使得所有節點的值在[l, r]中 (r>=l) 。你可能需要改變樹的根節點,所以結果應當返回修剪好的二叉搜尋樹的新的根節點。
輸入:
3/ \04\
2/1l =
1 r =
3輸出:3/
2/1
做這道題,我們需要了解一下二叉搜尋樹(二叉查詢樹,bst)是什麼,具有怎樣的性質:
根節點的值大於等於其左子樹中任意乙個節點的值,小於等於其右節點中任意一節點的值,這一規則適用於
二叉查詢樹中的每乙個節點。
有了這樣的性質我們就可以思考一下:
如果root.val如果root.val>r,那麼整個右子樹的所有值都》r,也就是右子樹不用遍歷了。
如果l
有了這樣的分析過程,我們看看**:
class
solution
:def
trimbst
(self, root: treenode, l:
int, r:
int)
-> treenode:
defdfs
(node):if
not node:
return
none
#值得注意的是這裡不是return 0,因為要求返回乙個treenode物件
if node.valnode = dfs(node.right)
elif node.val>r:
node= dfs(node.left)
else
: node.left=dfs(node.left)
node.right=dfs(node.right)
return node
return dfs(root)
值得注意的是return的用法,下面這兩種return寫法表達意思一樣:
1
.return2.
return
none
leetcode刷題筆記 二叉樹6
根據一棵樹的前序遍歷與中序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 前序遍歷 preorder 3 9,20 15,7 中序遍歷 inorder 9 3,15 20,7 返回如下的二叉樹 3 9 20 157這是我們資料結構學習二叉樹必考的題型之一,但我們這次需要程式設計做出,...
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...