#deque佇列
#deque佇列
給定一棵二叉搜尋樹,請找出其中第k大的節點。
#二叉搜尋樹本身就有規律(左子樹比根節點小,右子樹比根節點大)
#二叉搜尋樹的中序遍歷為:遞增序列
#中序遍歷的倒序+判斷
defkthlargest
(self, root: treenode, k:
int)
->
int:
defhelper
(root):if
not root:
return
helper(root.right)
#右nonlocal n,res
n+=1if n==k:
#中+判斷
res=root.val
return
helper(root.left)
#左 n,res=0,
0 helper(root)
return res
給定乙個二叉搜尋樹, 找到該樹中兩個指定節點的最近公共祖先。
輸入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4
輸出: 2
#root值在p,q之間,p==root,q==root返回root
#否則繼續遍歷樹
deflowestcommonancestor
(self, root:
'treenode'
, p:
'treenode'
, q:
'treenode')-
>
'treenode'
:def
helper
(root):if
not root or
(root.val>p.val and root.val
or root.val==p.val or root.val==q.val:
return root
elif root.val>q.val and root.val>p.val:
res=helper(root.left)
elif root.val
res=helper(root.right)
return res
if p.val>q.val:
p,q=q,p
return helper(root)
給定乙個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。
輸入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
輸出: 3
輸入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
輸出: 5
根據先序遍歷遍歷整棵子樹
若 root 是 p, q的最近公共祖先 ,則只可能為以下情況之一:
1、p和q 在 root的子樹中,且分列 root的 異側(即分別在左、右子樹中);
2、p = root,且 q 在 root的左或右子樹中;
3、q = root,且 p 在 root的左或右子樹中;
'''def
lowestcommonancestor
(self, root: treenode, p: treenode, q: treenode)
-> treenode:
ifnot root or root.val==p.val or root.val==q.val:
return root
l=self.lowestcommonancestor(root.left,p,q)
r=self.lowestcommonancestor(root.right,p,q)
ifnot r:
return l
ifnot l:
return r
return root
#l,r都有值,就是p,q在異側
#只有乙個有值就是在一側
劍指offer 二叉樹的層次遍歷
題目 從上往下列印出二叉樹的每個節點,同層節點從左至右列印。解題思路 建立乙個佇列,先將二叉樹的根節點放入佇列中,然後開始迴圈,只要佇列不為空,獲取佇列的第乙個元素,將其儲存為乙個節點tmp,接著將其push back到新陣列裡面,然後判斷其左孩子是否為空,若其不為空,將其push到佇列中,然後再繼...
劍指offer 二叉樹層次遍歷(Python)
從上往下列印出二叉樹的每個節點,同層節點從左至右列印。借助佇列。從根節點開始,依次將節點入佇列,判斷是否有孩子節點,然後將孩子節點入佇列,同時將該節點出佇列。coding utf 8 class treenode def init self,x self.val x self.left none s...
劍指offer 二叉樹的後序遍歷
思路 對於乙個二叉樹的後序遍歷序列來說,最後乙個數一定是根節點,然後前面的數中,從最開始到第乙個大於根節點的數都是左子樹中的數,而後面到倒數第二個數應該都是大於根節點的,是右子樹,如果後面的數中有小於根節點的,那麼說明這個序列不是二叉搜尋樹的後序遍歷序列。public class judgehoux...