给出一个数据序列,建立二叉排序树,并实现插入功能 对二叉排序树进行中序遍历,可以得到有序的数据序列

简介: 该文章通过C++代码示例讲解了如何根据输入数据序列构建二叉排序树,并实现插入功能,随后通过中序遍历输出有序的数据序列,展示了对二叉排序树进行操作和遍历的完整过程。

题目描述
给出一个数据序列,建立二叉排序树,并实现插入功能
对二叉排序树进行中序遍历,可以得到有序的数据序列

输入
第一行输入t,表示有t个数据序列
第二行输入n,表示首个序列包含n个数据
第三行输入n个数据,都是自然数且互不相同,数据之间用空格隔开
第四行输入m,表示要插入m个数据
从第五行起,输入m行,每行一个要插入的数据,都是自然数且和前面的数据不等
以此类推输入下一个示例

输出
第一行输出有序的数据序列,对二叉排序树进行中序遍历可以得到

从第二行起,输出插入第m个数据后的有序序列,输出m行

以此类推输出下一个示例的结果

样例输入
1
6
22 33 55 66 11 44
3
77
50
10

样例输出
11 22 33 44 55 66
11 22 33 44 55 66 77
11 22 33 44 50 55 66 77
10 11 22 33 44 50 55 66 77

#include<iostream>
using namespace std;

struct node
{

    int data;
    node* lc;
    node* rc;
    node():data(0),lc(NULL),rc(NULL){}
};
/*
    功能:将数字num,插入到根为root的二叉排序树中
    注:二叉排序树有个特点,左孩子小于爸爸,右孩子大于爸爸
*/
void addTree(node *root,int num)
{
    while(true)
    {
        if(num<root->data)
        {
            if(!root->lc)
            {
                root->lc=new node;
                root->lc->data=num;
                return;
            }
            else root=root->lc;
        }
        else
        {
            if(!root->rc)
            {
                root->rc=new node;
                root->rc->data=num;
                return;
            }
            else root=root->rc;
        }
    }
}

void printTree(node* &root)
{
    if(root)
    {
        printTree(root->lc);
        cout<<root->data<<" ";
        printTree(root->rc);
    }
}

int main()
{
    int t,num;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        cin>>num;
        node* Root=new node;
        Root->data=num;
        for(int i= 1; i< n ; i++)
        {
            cin>>num;
            addTree(Root,num);
        }
        printTree(Root);
        cout<<endl;
        cin>>n;
        for(int i= 0 ; i< n; i++)
        {
            cin>>num;
            addTree(Root,num );
            printTree(Root);
            cout<<endl;
        }
    }
    return 0;
}
相关文章
|
数据安全/隐私保护 Windows
Windows 命令提示符(CMD)操作(三):用户管理
Windows 命令提示符(CMD)操作(三):用户管理
|
Web App开发 开发工具 git
如何下载Github上的单个文件或者指定目录?
如何下载Github上的单个文件或者指定目录?
5900 0
如何下载Github上的单个文件或者指定目录?
|
机器学习/深度学习 数据可视化 数据挖掘
Python时间序列分析库介绍:statsmodels、tslearn、tssearch、tsfresh
时间序列分析在金融和医疗保健等领域至关重要,在这些领域,理解随时间变化的数据模式至关重要。在本文中,我们将介绍四个主要的Python库——statmodels、tslearn、tssearch和tsfresh——每个库都针对时间序列分析的不同方面进行了定制。这些库为从预测到模式识别的任务提供了强大的工具,使它们成为各种应用程序的宝贵资源。
1343 3
|
9月前
|
机器学习/深度学习 人工智能 安全
让AI学会“选择性遗忘”:数据脱敏如何守护你的隐私与安全
本文深入浅出讲解AI时代关键隐私技术——数据脱敏:解析掩码、聚合、微调三大“隐身术”,手把手演示Python实战(含差分隐私与分布生成),兼顾隐私安全与模型效用,并提供效果评估标准与未来趋势,助开发者打造合规、可信、可用的AI系统。(239字)
1140 9
|
11月前
|
人工智能 自然语言处理 搜索推荐
2025国内AI数字人企业厂商权威推荐与综合对比选择指南
数字人企业崛起,像衍科技、阿里、华为引领技术与应用变革。从服务到社交,数字人多元发展,赋能政务、文旅、医疗等领域,推动降本增效与数实融合,开启智能交互新时代。
|
算法 C++
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
【数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】 目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现二叉排序树的基本算法。 相关知识 为了完成本关任务,你需要掌握:二叉树的创建、查找和删除算法。具体如下: (1)由关键字序列(4,9,0,1,8,6,3,5,2,7)创建一棵二叉排序树bt并以括号表示法输出。 (2)判断bt是否为一棵二叉排序树。 (3)采用递归方法查找关键字为6的结点,并输出其查找路径。 (4)分别删除bt中关键
583 11
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
|
算法 Java
数据结构-构造哈夫曼树【详解+代码+图示】一文解惑!
数据结构-构造哈夫曼树【详解+代码+图示】一文解惑!
9333 1
|
SQL Oracle 关系型数据库
Oracle数据库基础教程:从安装到基本操作的全面介绍
Oracle数据库基础教程:从安装到基本操作的全面介绍
1192 10
|
机器学习/深度学习 自然语言处理 数据处理
通过深度学习识别情绪
通过深度学习识别情绪(Emotion Recognition using Deep Learning)是一项结合多模态数据的技术,旨在通过分析人类的面部表情、语音语调、文本内容等特征来自动识别情绪状态。情绪识别在人机交互、健康监测、教育、娱乐等领域具有广泛的应用。
2139 6
|
存储 监控 API
OpenStack有哪些主要组件?
【8月更文挑战第21天】
3448 2