演算法第八題(二叉樹)

2021-10-07 05:58:54 字數 2028 閱讀 3361

二叉樹的最小深度

class

solution

:def

mindepth

(self, root: treenode)

->

int:

if root is

none

:return

0if root.left is

none

and root.right is

none

:return

1

mindepth =

float

('inf'

)if root.left is

notnone

: mindepth =

min(self.mindepth(root.left)

,mindepth)

if root.right is

notnone

: mindepth =

min(self.mindepth(root.right)

,mindepth)

return mindepth +

1

二叉樹的最近公共祖先

class

solution

:def

lowestcommonancestor

(self, root:

'treenode'

, p:

'treenode'

, q:

'treenode')-

>

'treenode'

:if root in

(none

,p,q)

:return root

l = self.lowestcommonancestor(root.left,p,q)

r = self.lowestcommonancestor(root.right,p,q)

return r if l==

none

else l if r==

none

else root

dfs(後序遍歷),深度優先搜尋,就是一條路走到黑,走不通了就回溯換其他的路。

對稱二叉樹

# definition for a binary tree node.

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class

solution

:def

issymmetric

(self, root: treenode)

->

bool

:if root is

none

:return

true

return self.issymmetric(root.left,root.right)

defissymmetric

(self, node1, node2)

:if node1 is

none

:return

(node2 is

none

)if node2 is

none

:return

(node1 is

none

)if node1.val!=node2.val:

return

false

return self.issymmetric(node1.left,node2.right)

and self.issymmetric(node1.right,node2.left)

映象對稱,轉換為a樹的左子樹與b樹的右字數對稱,b樹的左子樹與a樹的右字數對稱,執行遞迴。

二叉樹演算法趣題

二叉樹中的節點x含有乙個變數wealth表徵了該節點的財富,定義二叉樹中節點x的heritage為其祖先節點 包括x 的所有wealth之和減去節點x的子孫節點的所有wealth之和。求二叉樹中heritage最大的節點及其值。要求不能改變原有二叉樹的結構,不能在節點之上儲存別的資訊,演算法複雜度盡...

(二叉樹提高題)還原二叉樹

給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入格式 輸入首先給出正整數n 50 為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母 區別大小寫 的字串。輸出格式 輸出為乙個整數,即該二叉樹的高度。輸入樣例 9 abdfghiec fdhgi...

每日演算法題 《重建二叉樹》

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。所以我們可以知道,前序遍歷第乙個是中,也就是頭結點 class treenode def init self,x self.val ...