二叉搜索树的第 k 大节点
给定一棵二叉搜索树,请找出其中第k大的节点。
输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2 输出: 4
题解
-
二叉搜索树的中序遍历序列是递增序列
- 算法思想
- 使用中序遍历的倒序,遍历每一个节点就-1,直到 k 等于 0
- 复杂度分析
- 时间复杂度 O(n)
- 空间复杂度 O(1)
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { int k,res; public int kthLargest(TreeNode root, int k) { this.k = k; dfs(root); return res; } void dfs(TreeNode root){ if(root == null)return; dfs(root.right); if(--k == 0){ res = root.val; return; } dfs(root.left); } }
- 算法思想
总结
- 主要考察二叉搜索树的中序遍历序列
- 要坚定不移的相信二叉搜索树前中后序遍历的正确性