二叉搜索树的第k大节点
给定一棵二叉搜索树,请找出其中第 k 大的节点的值。
- 使用中序递归遍历二叉搜索树
- 中序遍历二叉搜索树得到的结果是有序的,将遍历结果保存到 ArrayList
- 通过下标的方式获取 ArrayList 第 k 大节点
class Solution {
public int kthLargest(TreeNode root, int k) {
List<Integer> valList = new ArrayList<>(k);
inOrder(root, valList);
//valList 从小到大有序
return valList.get(valList.size() - k);
}
//中序递归遍历 二叉搜索树
private void inOrder(TreeNode root, List<Integer> valList) {
if (root == null) {
//递归遍历退出条件
return;
}
//先遍历节点的左子树
inOrder(root.left, valList);
//访问节点
valList.add(root.val);
//再遍历节点的右子树
inOrder(root.right, valList);
}
}