劍指offer 二叉樹遍歷

2021-10-19 14:45:24 字數 3548 閱讀 5045

#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...