题目链接:
- 牛客网:JZ54 二叉搜索树的第k个节点
题解:
/*
* function TreeNode(x) {
* this.val = x;
* this.left = null;
* this.right = null;
* }
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param proot TreeNode类
* @param k int整型
* @return int整型
*/
function KthNode( proot , k ) {
// write code here
if (!proot || !k) return -1 // 特殊情况,空树或k为0,返回-1
const arr = [] // 定义中序遍历数组
// 中序遍历
function orderArray(root) {
if (!root) return -1
// 左子树
orderArray(root.left)
arr.push(root.val)
// 右子树
orderArray(root.right)
}
orderArray(proot) // 调用中序遍历函数,求出中序遍历数组
// 如果k大于结点数量,返回-1
if (k > arr.length) {
return -1
}
// 索引k - 1的元素就是搜索树的第k个结点
return arr[k - 1]
}
总结:
二叉搜索树的概念:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。
二叉搜索树的特点:中序遍历“可以让结点有序。