题解 | #二叉搜索树的第k个节点#

二叉搜索树的第k个节点

https://www.nowcoder.com/practice/57aa0bab91884a10b5136ca2c087f8ff

/*
 * function TreeNode(x) {
 *   this.val = x;
 *   this.left = null;
 *   this.right = null;
 * }
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param proot TreeNode类 
 * @param k int整型 
 * @return int整型
 */
function KthNode( proot ,  k ) {
    if(proot == null || k == 0) return -1;

    // 中序遍历
    const list = traverse(proot);

    return k > list.length ? -1 : list[k - 1].val;

}

function traverse(node, list = []) {
    if(!node) return;

    traverse(node.left, list);

    list.push(node);
    
    traverse(node.right, list);

    return list;
}

module.exports = {
    KthNode : KthNode
};

思路:

按照题意,先将树按 中序遍历 出来,从中序数组中找到第 K 个元素。

这种方案需要额外提供个数组,不太好。

可以利用一个 count 哨兵,计数当前遍历的第几个元素

function KthNode( proot ,  k ) {
    // 哨兵 res存储找到的元素
    let count = 0, res;

    const midOrder = (node, k) => {
        if(!node || count > k) return;
        
        midOrder(node.left, k);
       // 中序遍历找到第 k 个元素        
        count++;
        if(count == k) {
            res = node.val;
        }

        midOrder(node.right, k);
    }

    midOrder(proot, k);

    if(!res) return -1;

    return res;

}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务