《劍指offer》49 搜尋二叉樹的第k大節點

2021-10-12 14:02:28 字數 728 閱讀 8985

首先,關於二叉樹的一些其它題目,可以參考:

《劍指offer》28-30、二叉樹四則:之字形遍歷、層次遍歷、搜尋二叉樹的後序遍歷、二叉樹的路徑

搜尋二叉樹的概念:左子結點值小於根節點值,根節點值小於右節點值,所以最後乙個元素肯定是根節點。

offer49的要求是找搜尋二叉樹的第k大節點,我採取的是中序遍歷的方法,如果對上面鏈結的題目都很熟的話,這裡真的沒啥好講的,**也簡單。我把inorder定義在了遞迴裡面,這樣看上去可能不太好理解,其實就是方便寫遞迴。

# offer49-solution

class

solution

:# 返回對應節點treenode

defkthnode

(self, proot, k):if

not proot or k <=0:

return

none

res =

definorder

(proot)

:# 中序遍歷

ifnot proot:

return

inorder(proot.left)

inorder(proot.right)

inorder(proot)

iflen

(res)

< k:

return

none

return res[k -

1]

劍指offer49 二叉搜尋樹與雙向鍊錶

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。注意 需要返回雙向鍊錶最左側的節點。例如,輸入下圖中左邊的二叉搜尋樹,則輸出右邊的排序雙向鍊錶。思路 實際上中序遍歷的遍歷順序就是雙線鍊錶的建立順序,用乙個pre指標儲存當前遍歷結點的前...

劍指offer 二叉樹 二叉樹搜尋樹

package bst import j a.util.public class bst if pre.length 0 in.length 0 treenode root new treenode pre 0 for int i 0 i in.length i return root 判斷給定陣列...

劍指offer 二叉樹 二叉搜尋樹的後序遍歷

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。例如輸返回true 輸入返回false 1,利用二叉搜尋樹左 中 右的特性,和後序遍歷的特點 2,後序遍歷為左右根,則陣列末尾為根,然後依據大小找出左子樹和右子樹...