1099 Build A Binary Search Tree

根据给定的无序输入序列,首先将其排序,然后利用二叉搜索树的性质构建唯一BST。中序遍历序列即为排序后的输入序列。通过创建数据到节点的映射数组,确定树结构,最后输出BST的层序遍历结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

Build A Binary Search Tree

思路

题目描述:题目给定一个BST的结构,再给出一个输入序列来构造BST,(这样的二叉树是唯一的);  

                  要求输出BST的层序遍历;

思路:给出的序列是无序的,可以先将其排序(增序);

           二叉搜索树的中序遍历序列即排序后的输入序列;

           可以利用中序遍历先建立序列中数据到对应节点的映射(数组实现);

           这样树的结构和节点对应的数据都确定了,最后输出层序序列;

CODE ⇩⇩⇩

#include <bits/stdc++.h>
using namespace std;
int lt[100],rt[100],lis[100],mp[100];
queue<int> que;
static int cnt = 0;
void inOrder(int node){
    if(node == -1) return;
    inOrder(lt[node]);
    mp[node] = lis[cnt++];
    inOrder(rt[node]);
}
void levelOrder(int root){
    que.push(root);
    while(!que.empty()){
        int it = que.front();
        cout<<(it == root ? "" : " ")<<mp[it];
        if(lt[it] != -1) que.push(lt[it]);
        if(rt[it] != -1) que.push(rt[it]);
        que.pop();
    }
}
int main() {
    int n; cin>>n;
    for(int i = 0;i < n;i++) cin>>lt[i]>>rt[i];
    for(int i = 0;i < n;i++) cin>>lis[i];
    sort(lis,lis+n);
    inOrder(0);
    levelOrder(0);
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值