首页 > 其他分享 >二叉排序树的创建与使用

二叉排序树的创建与使用

时间:2022-11-30 10:09:55浏览次数:36  
标签:ld LNode int 创建 二叉 rd coutdata key 排序


根据大家的意见,从这个题目开始,以后都会简单注释,这样更方便大家阅读,如果还有什么不懂的地方,可以留言!

描述


二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树:(1)若它的左子树不空,则左子树上所有的结点值均小于它的根结点的值;(2)若它的右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;(3)它的左右子树也分别为二叉排序树。现要求根据输入的元素值,构造一棵二叉排序树,并输出其先序遍历、中序遍历和后序遍历结果。


输入


输入第一行为测试用例个数n,接下来为n个测试用例,每个测试用例占两行,其中第一行为元素个数m,第二行为m个需要构造成二叉排序树的元素值。


输出


每个测试用例用三行输出,其中第一行输出先序遍历结果,第二行输出中序遍历结果,第三行输出后序遍历结果。各元素之间用一个空格隔开。


样例输入


1
5
8 4 2 6 4



样例输出


8 4 2 6 4
2 4 4 6 8
2 4 6 4 8



#include<iostream>
using namespace std;
typedef int KeyType;
typedef struct node
{
KeyType data;
struct node *rd,*ld;
}*LNode;
LNode p;
int f=0;
int Init(LNode &t) //创建一棵空树
{
t= new node;
t->data=0;
t->rd=t->ld=NULL;
}
int create(LNode &t,int key) //这个是根据二叉排序数的性质而写的,在这里用到了递归调用,使代码大幅度的简单化了
{
if(t==NULL){return 0;}
if(key<t->data){p=t;create(t->ld,key);}//判断他的大小,区分左右,利用P记住当前位置
else {p=t;create(t->rd,key);}
}
int insert(LNode &p,int key)//根据上一个函数,通过p写入数据
{
LNode s = new node;
s->data=key;s->ld=s->rd=NULL;
if(key>=p->data)p->rd=s;
else p->ld=s;
}
void preorder(LNode t) //先序输出
{
if(t)
{
if(f==0){cout<<t->data;f=1;}
else cout<<" "<<t->data;
preorder(t->ld);
preorder(t->rd);
}
}
void inorder(LNode t) //中序输出
{
if(t)
{
inorder(t->ld);
if(f==0){cout<<t->data;f=1;}
else cout<<" "<<t->data;
inorder(t->rd);
}
}
void postorder(LNode t) //后序输出
{
if(t)
{

postorder(t->ld);
postorder(t->rd);
if(f==0){cout<<t->data;f=1;}
else cout<<" "<<t->data;
}
}
int main()
{
LNode t;
int n,m,key;
cin>>n;
while(n--)
{
Init(t);
cin>>m;
cin>>key;
t->data=key;
for(int i=1;i<m;i++){
cin>>key;
create(t,key);
insert(p,key);
}
f=0;preorder(t);cout<<endl;//在输出的时候,因为有个空格问题要注意,所以在这里我定义了一个f,进行处理
f=0;inorder(t);cout<<endl;
f=0;postorder(t);cout<<endl;
}
return 0;
}


标签:ld,LNode,int,创建,二叉,rd,coutdata,key,排序
From: https://blog.51cto.com/u_15896805/5897480

相关文章

  • 奖学金 qsort函数多重排序
    奖学金时间限制(普通/Java):1000MS/3000MS         运行内存限制:65536KByte总提交:70           测试通过:31描述p{margin-bottom:0......
  • 字符排序
    描述给定一个字符串str和两个字符a,b,将str中ASCII码处于a,b之间(含ab)的字符按ASCII码从大到小排序,其他字符位置不变.输出排序后的字符串。输入输入只有两行:第一行给......
  • 【开发小技巧】024—如何使用HTML和CSS创建加载模糊文本动画效果?
    英文| https://www.geeksforgeeks.org/how-to-create-loading-blur-text-animation-effect-using-html-and-css/?ref=rp翻译|web前端开发模糊文本动画被称为“烟熏效果......
  • 10种经典排序算法的JavaScript实现方法
    排序算法是《数据结构与算法》中最基本的算法之一。常见的一些排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。其中,冒泡排序......
  • 二叉排序树
    二叉排序树BinarySortTree,简称BST,要求二叉排序树的任意一个非叶子节点的左节点的值<=该节点值<=右节点值1.0二叉排序树的创建和遍历思路分析节点类属性:value,......
  • 【开发小技巧】025—如何使用HTML和CSS创建反射效果?
    英文| https://www.geeksforgeeks.org/how-to-create-reflection-effect-using-html-and-css/?ref=rp翻译|web前端开发反射效果是可以在网站上使用的最酷的效果之一。这......
  • #yyds干货盘点# 动态规划专题:二叉树中的最大路径和
    1.简述:描述二叉树里面的路径被定义为:从该树的任意节点出发,经过父=>子或者子=>父的连接,达到任意节点的序列。注意:1.同一个节点在一条二叉树路径里中最多出现一次2.一条路径......
  • 集合习题分数排序
    创建一个学生类,属性包括id[1-40],分数0-100,所有属性随机生成,创建set集合,保存20个对象,找到分数最高和分数最低的学生privatestaticvoiddemo2(){//用treeset......
  • 【算法训练营day21】LeetCode530.二叉搜索树的最小绝对差 LeetCode501. 二叉搜索树中
    LeetCode530.二叉搜索树的最小绝对差题目链接:530.二叉搜索树的最小绝对差初次尝试利用二叉搜索树的性质:中序遍历的结果是有序递增数组,最后遍历该数组得到最小绝对差。c......
  • 创建PV报错Device /dev/sdX excluded by a filter
    报错如下:解决办法:在进行pvcreate创建PV时,可能会遇到Device/dev/sdXexcludedbyafilter报错,一般出现这个错误是在通过parted分区并删除相应的分区信息以后。遇到这种......