剑指 Offer 54. 二叉搜索树的第k大节点
题目
给定一棵二叉搜索树,请找出其中第k大的节点。
示例 1:
1 2 3 4 5 6 7
| 输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2 输出: 4
|
示例 2:
1 2 3 4 5 6 7 8 9
| 输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 / 1 输出: 4
|
限制:
1 ≤ k ≤ 二叉搜索树元素个数
题解
解这道题我们只需要清楚两个知识点:
二叉树一共三种遍历方式:
二叉搜索树的特性:右子节点比根节点大,左子节点比根节点小,且通过中序遍历所得到的序列,就是有序的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
class Solution { private int kthVal = 0, count = 0; public int kthLargest(TreeNode root, int k) { traverse(root, k); return kthVal; } private void traverse(TreeNode root, int k) {
if (root.right != null) { traverse(root.right, k); } if (++count == k) { kthVal = root.val; return; } if (root.left != null) { traverse(root.left, k); } } }
|