排序二叉树的实现

排序二叉树的实现在计算机科学中,二叉树是一种重要的非线性的数据结构。每个结点的度均小于等于2,通常子树称为左子树和右子树。而排序二叉树是二叉树中的一种,其满足:1.如左子树不为空,那么左子树上的结点的值都小于其根上的值;2.如右子树不为空,那么右子树上的结点的值都大于其根上的值;3.其子树也是一个排序二叉树。下面用递归的方式来插入一个结点来满足上述的要求:typedefstructNode{

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在计算机科学中,二叉树是一种重要的非线性的数据结构。每个结点的度均小于等于2,通常子树称为左子树和右子树。而排序二叉树是二叉树中的一种,其满足:1. 如左子树不为空,那么左子树上的结点的值都小于其根上的值;2. 如右子树不为空,那么右子树上的结点的值都大于其根上的值; 3. 其子树也是一个排序二叉树。

下面用递归的方式来插入一个结点来满足上述的要求:

typedef struct Node
{
	int data;
	Node *lchild;
	Node *rchild;
}Node,*LNode;
void _insert1(LNode &T1,int key)
{
	if(T1==NULL)
	{
		T1=new Node;
		T1->data=key;
		T1->lchild=NULL;
		T1->rchild=NULL;
	}
	else
	{
		if(T1->data>key)
			_insert1(T1->lchild,key);
		else
			_insert1(T1->rchild,key);
	}
}

首先定义了一个二叉树结点的结构体,然后采用递归的方式创建了满足上述排序二叉树要求的插入函数;

下面定义中序遍历函数,使得排序二叉树上的数据元素按照升序的方式输出打印:

void inOrder(LNode T1)
{
	if(T1!=NULL)
	{
		inOrder(T1->lchild);
		cout<<T1->data<<" ";
		inOrder(T1->rchild);
	}
}

然后定义一个查找函数,以递归的方式实现,若查找的元素比根节点的元素大则在右子树中继续查找,反之在左子树中继续查找:

LNode _find(LNode T1,int key)
{
	if(T1==NULL) 
	{
		cout<<"No such element";
		return NULL;
	}
	if(T1->data==key) return T1;
	else
	{
		if(key>T1->data)
		{
			_find(T1->rchild,key);
		}
		else
		{
			_find(T1->lchild,key);
		}
	}
}

最后定义一个计算排序二叉树的深度的函数:同样适用递归的方式实现:

int _deep(LNode T1)
{
	int r=0,l=0;
	if(T1==NULL) return 0;
	else
	{
		r=_deep(T1->rchild);
		l=_deep(T1->lchild);

	}
	if(r>l) return r+1;
	else return l+1;
}

测试代码如下:

void main()
{
	LNode L1=NULL;
	int x1=0;
	while(cin>>x1)
	{
		_insert1(L1,x1);
	}
	inOrder(L1);
	cout<<endl<<_deep(L1)<<endl;
	LNode L2=_find(L1,3);	
}

排序二叉树的实现

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160010.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • springboot 2.0 springboottest 事物自动回滚,事物不自动回滚 @Transactional @Rollback[通俗易懂]

    springboot 2.0 springboottest 事物自动回滚,事物不自动回滚 @Transactional @Rollback[通俗易懂]@Transactional//支持事物,@SpringBootTest事物默认自动回滚@Rollback//事务自动回滚,不自动回滚@Rollback(false)packagecom.urthink.upfs.springbootmybatis;importcom.github.pagehelper.PageHelper;importcom.github.pageh…

    2022年5月18日
  • 电容分类和作用_电容的识别

    电容分类和作用_电容的识别硬件基础知识—电容分类智能硬件和物联网产品上,工作电压不高,其常用的电容根据不同的工艺,主要分为陶瓷电容、电解电容和钽电容。↑陶瓷电容的结构图↑电解电容的结构图不管是什么电容,都是两组金属片夹着一层介质。陶瓷电容把金属片交错摆放,电解电容把金属片卷成柱状。↑片状陶瓷电容↑贴片陶瓷电容陶瓷电容,MultilayerCeramicCapacitor(MLCC),陶瓷电容的电介质是陶瓷,所以叫做陶瓷电容。陶瓷电容容值小、电压高、尺寸小、高频性能好、不区分正.

    2022年8月22日
  • 查询各种数据的网站_中国最全的数据网站

    查询各种数据的网站_中国最全的数据网站1、国家数据——主要用户:社会情况研究人员国家统计局开设网站,公布我国各个领域的宏观经济情况,权威度高2、中国裁判文书网——主要用户:法律从业/学习/爱好者中国最高人民法院开设,权威可信,可用于查询国内裁判文书,可作数据统计来源3、中国互联网数据平台——主要用户:互联网研究人员经国家主管部门批准组建的管理和服务机构,经常发布一些有价值的互联网信息报告4、中国信通院——主要用户:互…

    2022年4月20日
  • C++ 序列化和反序列化

    C++ 序列化和反序列化序列化序列化1、背景2、定义3、序列化评价指标4、序列化实例参考序列化1、背景1、在TCP的连接上,它传输数据的基本形式就是二进制流,也就是一段一段的1和0。2、在一般编程语言或者网络框架提供的API中,传输数据的基本形式是字节,也就是Byte。一个字节就是8个二进制位,8个Bit。二进制流和字节流本质上是一样的。对于我们编写的程序来说,它需要通过网络传输的数据是结构化的数据,比如,一条命令、一段文本或者一条消息。对应代码中,这些结构化的数据都可以用一个类或者一个结构体来表示。序

    2022年6月17日
  • 【高级】PHP-FPM和Nginx的通信机制

    【高级】PHP-FPM和Nginx的通信机制

    2021年11月6日
  • vue中上传文件_vue下载文件乱码

    vue中上传文件_vue下载文件乱码vue文件上传下载报文件损坏

    2022年8月15日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号