给定一棵二叉搜索树,请找出其中第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的节点元素,然后输出
二叉搜索树,遍历方式,先序,中序,后续,其中中序遍历得出的结果是有序的,因此可以直接使用,来找第k大节点。
定义一个全局数组,在函数内部写一个中序遍历的子函数,然后调用输出结果即可。
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @param {number} k
* @return {number}
*/
var kthLargest = function(root, k) {
//遍历树后求出,第k大的数,中序遍历二叉搜索树得出的顺序时有序的
var res=[];
//中序遍历子函数
function zhongxu(root){
if(root==null) return;
//左中右
zhongxu(root.left);
res.push(root.val);
zhongxu(root.right);
return res;
}
// console.log(res);
zhongxu(root);//保存中序调用的结果
var len=res.length;
return res[len-k];
};
这个题目还有其他更优秀的解法,,如中序逆序等,后续会补充记录。