leetcode刷題筆記 二叉樹5

2021-10-05 01:55:59 字數 2475 閱讀 1811

給定乙個不含重複元素的整數陣列。乙個以此陣列構建的最大二叉樹定義如下:

二叉樹的根是陣列中的最大元素。

左子樹是通過陣列中最大值左邊部分構造出的最大二叉樹。

右子樹是通過陣列中最大值右邊部分構造出的最大二叉樹。

通過給定的陣列構建最大二叉樹,並且輸出這個樹的根節點。

輸入:[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...