【刷算法】二叉搜索树的第k个结点

155 阅读1分钟

题目描述

给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值从小到大顺序第三小结点的值为4。

分析

二叉搜索树的特点就是对于某个点来说,左子树上的点小于该点,右子树上的点大于该点。所以按照中序遍历的方法得到的序列即是从小到大的序列。

代码

/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */
function KthNode(r, k)
{
    if(r === null)
        return null;
    var res = [];
    var s = [];
    var cur = r;
    
    while(cur !== null || s.length !== 0) {
        if(cur !== null){
            s.push(cur);
            cur = cur.left;
        }else{
            cur = s.pop();
            res.push(cur);
            if(res.length === k)
                return res.pop();
            cur = cur.right;
        }
    }
    
    return null;
}