劍指offer【54】:返回二叉搜索樹的第K大節點

題目:

思路+代碼:

思路一:

pythonic寫法:三行代碼,中序遍歷二叉樹返回遍歷list


class Solution:
    def kthLargest(self, root: TreeNode, k: int) -> int:
        # pythonic寫法
        def dfs(root):
            return dfs(root.left) + [root.val] + dfs(root.right) if root else []
        return dfs(root)[-k]

 

思路二:

遞歸寫法,逆中序遍歷,遍歷到第K大節點就停止;

class Solution:
    def kthLargest(self, root: TreeNode, k: int) -> int:
        # # 逆中序遍歷,右中左順序進行查找;設置兩個類變量,self.k,和self.result
        def dfs(root):
            if not root:
                return
            dfs(root.right)

            self.k -= 1  # 遍歷完當前這個節點,k-1;  因爲 1<=k<= 元素個數
            if self.k == 0:
                self.res = root.val   # 對當前節點進行判斷是否是第k個節點
                return 

            dfs(root.left)
            
        self.k = k
        dfs(root)
        return self.res

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章