首页 > 试题广场 >

查找二叉搜索树的叶子节点

[编程题]查找二叉搜索树的叶子节点
  • 热度指数:1459 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给一个二叉查找树(Binary Search Tree)的前序遍历结果数组,打印出所有的叶子节点。


输入描述:

输入为二叉查找树的前序遍历结果数组,元素之间用空格分隔:

9 8 7 10



输出描述:

所有的叶子节点元素,用空格分隔

解释:因为二叉搜索树的表示为:

       9

   8    10

7

输出的叶子节点为: 7 10

示例1

输入

9 8 7 10

输出

7 10
const readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
})

const results = []

rl.on('line',str=>{
    const nodes = str.split(' ').map(item=>{
        return parseInt(item)
    })
    const bt = createBT(nodes)
    traverse(bt, 1)
    
    console.log(results.join(' '))
})



function createBT(nodes){
    const bt = []
    nodes.forEach(node=>{
        insertNode(bt, node, 1)
    })
    return bt
}


function insertNode(bt, node, i){
    if(!bt[i]){
        bt[i] = node
        return
    }
    //递归
    if(node < bt[i]){
        insertNode(bt, node, 2*i)
    }else{
        insertNode(bt, node, 2*i+1)
    }
}

//遍历
function traverse(bt, i){
    if(!bt[i]){
        return 
    }
    //只打印叶子节点
    if(!bt[2*i] && !bt[2*i+1]){
        //console.log(bt[i])
        results.push(bt[i])
    }
    traverse(bt, 2*i)
    traverse(bt, 2*i+1)
}

发表于 2021-04-04 20:45:40 回复(0)