二叉搜索树的第k大节点
给定一棵二叉搜索树,请找出其中第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
限制:
1 ≤ k ≤ 二叉搜索树元素个数
思路
利用递归思想, 二叉搜索树利用中序遍历会得到一个递增数列 调整下递归方法中的顺序 "右子树" "根节点" "左子树" 就会得到一个递减数列
Java解题
ArrayList<TreeNode> arrayList = new ArrayList<>();
public int kthLargest(TreeNode root, int k) {
if (k == 0 || root == null) return -1;
inorder(root);
TreeNode node = arrayList.get(k - 1);
return node.val;
}
public void inorder(TreeNode root) {
if (root == null) return;
inorder(root.right);
arrayList.add(root);
inorder(root.left);
}
Swift解题
func kthLargest(_ root: TreeNode?, _ k: Int) -> Int {
if k == 0 || root == nil {
return -1;
}
inorder(root)
let node = arrayList[k - 1];
return node.val
}
func inorder(_ root: TreeNode?) {
if root == nil {
return
}
inorder(root?.right)
arrayList.append((root?.right)!)
inorder(root?.left)
}
```