[LeetCode]Kth Smallest Element in a BST BST中第k大元素
Kth Smallest Element in a BST
DFS
class Solution(object):
def kthSmallest(self, root, k):
"""
:type root: TreeNode
:type k: int
:rtype: int
"""
def dfs(node):
if not node:
return
dfs(node.left)
nums.append(node.val)
dfs(node.right)
nums = []
dfs(root)
return nums[k-1]
class Solution(object):
def kthSmallest(self, root, k):
"""
:type root: TreeNode
:type k: int
:rtype: int
"""
self.count = 0
def dfs(node):
if not node:
return
if self.count == k:
return
dfs(node.left)
if self.count < k:
nums.append(node.val)
self.count += 1
dfs(node.right)
nums = []
dfs(root)
return nums[k-1]
二分查找
class Solution(object):
def kthSmallest(self, root, k):
"""
:type root: TreeNode
:type k: int
:rtype: int
"""
def getsize(node):
if not node:
return 0
return 1 + getsize(node.left) + getsize(node.right)
if not root:
return 0
left_size = getsize(root.left)
if k == left_size + 1:
return root.val
elif left_size >= k:
return self.kthSmallest(root.left, k)
else:
return self.kthSmallest(root.right, k-left_size-1)
![](https://i.loli.net/2018/11/17/5beff4d639cbb.jpg)
关注公众号:数据结构与算法那些事儿,每天一篇数据结构与算法