题解 | #在二叉树中找到一个节点的后继节点#

在二叉树中找到一个节点的后继节点

http://www.nowcoder.com/practice/c37ec6a9e4084b9c943be2d3a369e177

JS构建二叉树后中序遍历

let line
let inputs = []
while (line = readline()) {
    var lines = line.split(' ');
    inputs.push(lines)
    if(inputs.length == parseInt(inputs[0][0])+2){
        
        let firstLine = inputs.shift()
        let n = parseInt(firstLine[0])
        let root  = firstLine[1]
        let node = inputs.pop()[0]
        let Tree = buildTree(inputs)
        order(Tree, node)
    }
}
//定义二叉树class
function TreeNode(val, left, right) {
    this.val = (val===undefined ? 0 : val)
    this.left = (left===undefined ? null : left)
    this.right = (right===undefined ? null : right)
}
/**构建二叉树 
传入tree = [[6, 3, 9],[3, 1, 4],[1, 0, 2],[2, 0, 0],[4, 0, 5],[5, 0, 0],[9, 8, 10],[10, 0, 0],[8, 7, 0],[7, 0, 0];**/
function buildTree(tree){
    let map = {0:null}
    for(let i = 0; i < tree.length; i++){
        map[tree[i][0]] = new TreeNode(...tree[i])
    }
    for(let i = 0; i < tree.length; i++){
        map[tree[i][0]].left = map[tree[i][1]]
        map[tree[i][0]].right = map[tree[i][2]]
    }
    return map[tree[0][0]] //返回根节点
}
//前序遍历,传入已经构建的二叉树Tree
function order(Tree, node){
    let orderList = []
    let res = 0
    const dfs = function(Tree){
        if(!Tree) return
        dfs(Tree.left)
        orderList.push(Tree.val)
        dfs(Tree.right)
    }
    dfs(Tree)
    orderList.map((item, index)=>{
        if(item == node){
            res = index
        }
    })
    console.log(res+1 >= orderList.length?0:orderList[res+1])
}
全部评论

相关推荐

06-11 17:39
门头沟学院 Java
小呆呆的大鼻涕:卧槽,用户彻底怒了
点赞 评论 收藏
分享
06-12 16:23
已编辑
小米_软件开发(准入职员工)
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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