二叉搜索树的第k大节点
二叉树学的不太好,只想到一种容易理解的方法
题解里排第一那样中序遍历时对k递减会好很多
class Solution:
def kthLargest(self, root: TreeNode, k: int) -> int:
def nodeNums(root):
if not root:
return 0
return nodeNums(root.left) + nodeNums(root.right) + 1
if nodeNums(root.right) + 1 == k:
return root.val
elif nodeNums(root.right) + 1 < k:
return self.kthLargest(root.left, (k - nodeNums(root.right) -1))
else:
return self.kthLargest(root.right, k)