題目:
思路+代碼:
思路一:
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