DS二叉排序树之创建和插入

题目描述

给出一个数据序列,建立二叉排序树,并实现插入功能

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

输入

第一行输入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;
class CNode
{
public:
    int data;
    CNode *left;
    CNode *right;
    CNode()
    {
        left=right=NULL;
    }
};

class BStree
{
public:
    CNode *root;
    BStree()
    {
        root=NULL;
    }
    void addTree(int number)
    {
        CNode *t=root;
        while(true)
        {
            if(number<t->data)
            {
                if(t->left==NULL)
                {
                    t->left=new CNode();
                    t->left->data=number;
                    return;
                }
                else
                {
                    t=t->left;
                }
            }
            else
            {
                if(t->right==NULL)
                {
                    t->right=new CNode();
                    t->right->data=number;
                    return;
                }
                else
                {
                    t=t->right;
                }
            }
        }
    }
    void printTree(CNode *p)
    {
        if(p)
        {
            printTree(p->left);
            cout<<p->data<<" ";
            printTree(p->right);
        }
    }
};

int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int n;
        cin>>n;
        BStree Tree;
        for(int i=0;i<n;i++)
        {
            int c;
            cin>>c;
            if(i==0)
            {
                Tree.root=new CNode();
                Tree.root->data=c;
            }
            else
            {
                Tree.addTree(c);
            }
        }
        Tree.printTree(Tree.root);
        cout<<endl;
        int m;
        cin>>m;
        while(m--)
        {
            int ch;
            cin>>ch;
            Tree.addTree(ch);
            Tree.printTree(Tree.root);
            cout<<endl;
        }
    }
    return 0;
}

原文地址:https://www.cnblogs.com/SZU-DS-wys/p/12183020.html

时间: 2024-11-03 21:02:59

DS二叉排序树之创建和插入的相关文章

二叉查找树(二叉排序树)创建,插入,删除操作。

二叉排序树 二叉排序树是一个基础的树的数据结构.应用非常多. 它的特性就是,左孩子小于parent,右孩子大于parent. 寻找节点 寻找节点就是直接根据数值的大小,从root节点开始遍历,大于当前遍历节点就向它的右子树查找,相反则查找它的左子树.然后返回. 查找最大最小节点 直接根据root节点,遍历到最右就是最大节点,遍历到最左,就是最小节点. 插入节点 插入节点我这里插入的节点都会成为叶子节点.根据大小的关系向下遍历,遍历到最后的节点,然后插入就可以了. 删除节点 这里删除节点是相对麻烦

二叉排序树的创建,遍历和删除

Binary Sort/Search Tree 为什么会有它 数组 未排序:直接在队尾添加,速度快:查找速度慢. 排序:二分查找,查找速度快:添加新数据,需要找到插入位置移动后面的数组,速度慢 链表 添加快,查找慢: 简介 BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大. 特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点 比如针对前面的数据 (7,3, 10, 12,

【JS学习笔记】DOM操作应用-创建、插入和删除元素;文档碎片

一.创建.插入和删除元素 (1)创建DOM元素 createElement(标签名) 创建一个节点 appendChild(节点) 追加一个节点 例子:为ul插入li <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="htt

DOM节点对象之创建和插入节点示例

示例:创建和插入节点. 1.新建节点:createElement("节点名") 2.新建文本节点:createTextNode("文本内容") 3.将文本节点添加到新建节点中:appendChild(文本节点名) 4.获取要插入节点的对象:getElementById("id名") 5.将新建节点插入到目标节点对象中:insertChild(要插入节点名,目标节点位置) <!doctype html><html><h

创建,插入,删除一个document(createing,indexing and deleteing a document)

创建,插入,删除的请求都是写操作,在把primary shard复制到相对应的replica shard之前,这些操作必须是成功的.如图: 下面将会有序列出使用crate,index,delete在primary shard和replica shard上成功操作document的必要步骤,正如上图所示一样. 1:客户端发送create,index,delete请求到node1,于是把请求转发到node3 2:node1使用document的_id判断得知这个document是在shar0上,这里

链表(创建,插入,删除和打印输出(转载)

链表(创建,插入,删除和打印输出 /*----------------------------------------------------------------------------- 文件功能:实现了动态建立一个学生信息的链表包括链表的创建.插入.删除.和打印输出学生信息包括姓名和分数本链表是带有头结点的,头结点的内容为空内容-----------------------------------------------------------------------------*//*

创建位图插入符

CWindow::CreateCaret//图形插入符 //CreateSolidCaret 插入符 BOOL CreateCaret( HBITMAP pBitmap ); int CXuexi2View::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; //调用Windows处理函数对应的create // TODO: Add your specia

二叉排序树的查找、插入和删除

1.      二叉排序树 二叉排序树(Binary Sort Tree)或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值: (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值: (3)左.右子树也分别为二叉排序树: (4)没有结点值相同的结点. 二叉排序树又称二叉查找树(Binary Search Tree),亦称二叉搜索树.通常采用二叉链表作为二叉排序树的存储结构.中序遍历二叉排序树可以得到关键字有序的序列,即一个无序序

c语言 双向链表的简单操作-创建、插入、删除

数据结构-双向链表的创建.插入和删除 双向链表是数据结构中重要的结构,也是线性结构中常用的数据结构,双向指针,方便用户从首结点开始沿指针链向后依次遍历每一个结点,结点的前驱和后继查找方便. #include <stdio.h> #include <stdlib.h> //双向链表结点的定义 typedef struct dbnode { int data; struct dbnode *prio, *next; }DbNode, linkdblist; //创建双向链表 DbNod