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

问题形貌

给定一棵二叉搜刮树,请找出个中的第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;
}
    原文作者:亚古
    原文地址: https://segmentfault.com/a/1190000015674022
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞