【中等】二叉搜索树的第k个节点 - 2.26

40 阅读1分钟

题目链接:

题解:

/*
 * 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]
}

总结:

二叉搜索树的概念:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。

二叉搜索树的特点:中序遍历“可以让结点有序。