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

简介: 该文章通过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;
}
相关文章
|
4月前
|
算法
数据结构和算法学习记录——层序遍历(层次遍历)、二叉树遍历的应用(输出二叉树中的叶节点、求二叉树的高度、二元运算表达式树及其遍历、由两种遍历序列确定二叉树)
数据结构和算法学习记录——层序遍历(层次遍历)、二叉树遍历的应用(输出二叉树中的叶节点、求二叉树的高度、二元运算表达式树及其遍历、由两种遍历序列确定二叉树)
35 0
|
4月前
|
算法
数据结构和算法学习记录——认识二叉搜索树及二叉搜索树的查找操作(递归以及迭代实现-查找操作、查找最大和最小元素)
数据结构和算法学习记录——认识二叉搜索树及二叉搜索树的查找操作(递归以及迭代实现-查找操作、查找最大和最小元素)
41 0
|
存储 算法
算法训练Day18|● 513.找树左下角的值● 112. 路径总和 113.路径总和ii● 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
算法训练Day18|● 513.找树左下角的值● 112. 路径总和 113.路径总和ii● 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
算法训练Day22|235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点
算法训练Day22|235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点
算法训练Day23|669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树
算法训练Day23|669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树
二叉树习题系列1--将二叉搜索树排序树转化为双向链表
二叉树习题系列1--将二叉搜索树排序树转化为双向链表
7-174 两个有序链表序列的合并
7-174 两个有序链表序列的合并
69 0
|
算法 Java
【算法】字符串复原IP地址,从前序与中序编辑序列构造二叉树 三道算法题
字符串复原IP地址,从前序与中序编辑序列构造二叉树
111 1
【算法】字符串复原IP地址,从前序与中序编辑序列构造二叉树 三道算法题
二叉查找树的建立,删除,非递归和递归查找给定元素,非递归和递归查找最大元素结点和最小元素结点
二叉查找树的建立,删除,非递归和递归查找给定元素,非递归和递归查找最大元素结点和最小元素结点
先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数
先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数
535 0
先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数