二叉樹的最小深度
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 ...