给定一棵二叉搜索树,请找出其中第k大的节点。
示例 1:
输入: root = [3,1,4,null,2], k = 1
3
/ \
1 4
\
2
输出: 4
示例 2:
输入: root = [5,3,6,2,4,null,null,1], k = 3
5
/ \
3 6
/ \
2 4
/
1
输出: 4
解答:
解法基于此性质:二叉搜索树的中序遍历为 递增序列 。
根据以上性质,易得二叉搜索树的 中序遍历倒序 为 递减序列 。
因此,求 “二叉搜索树第 k大的节点” 可转化为求 “此树的中序遍历倒序的第 k个节点”。
from binarytree import build
# 打印中序遍历倒序
k = 1
value = [3,1,4,None,2]
reverse_mid_order = [] # 存储中序遍历倒序数组
def dfs(root):
if not root: return
dfs(root.right) # 右
# print(root.val) # 根
reverse_mid_order.append(root.val)
dfs(root.left) # 左
root = build(value)
dfs(root)
res = reverse_mid_order[k-1] # 获取第k个倒序值
print(res)