排序二叉树的实现

排序二叉树的实现在计算机科学中,二叉树是一种重要的非线性的数据结构。每个结点的度均小于等于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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • BM3D 图像去噪

    BM3D 图像去噪BM3D图像去噪论文:Imagedenoisingbysparse3-Dtransform-domaincollaborativefiltering代码:python代码介绍:图像去噪算法:BM3D 加性噪声方程,其中噪声η\etaη常常用均值为0的高斯噪声近似表示: BM3D去噪算法结合了空间算法非局部去噪方法Non-localmethod,和转换算法transformmethod。算法主要分两步,每一步又分为三小步:相似块分组、协同滤波和聚合。.

    2022年5月9日
    32
  • 网络安全未来发展前景_十四五国家网络安全规划

    网络安全未来发展前景_十四五国家网络安全规划第1章:中国网络安全行业发展综述1.1网络安全行业概述1.1.1网络安全产业的概念分析1.1.2网络安全产品和服务分类(1)依据主要功能及形态分类(2)依据安全防御生命周期技术能力分类1.2网络安全行业发展环境分析1.2.1行业政策环境分析(1)国际政策(2)国内政策1.2.2行业社会环境分析(1)境内感染网络病毒终端数(2)境内被篡改网站数量(3)境内被植入后门网站数量(4)安全漏洞数量1.2.3行业经济环境分析(1)国内生产总值分析(2)工业增加值分析.

    2022年10月5日
    1
  • 全球vps交流网站超级vps管理器_phpyun采集

    全球vps交流网站超级vps管理器_phpyun采集今天在写《请珍惜免费资源》这篇文章的时候无意中又发现一款无限流量免费PHP空间「FreeWebHostingArea」,搜索了一下已经有14年的时间,下面老俍就来介绍一下这款免费主机的申请及使用说明。FreeWebHostingArea是美国的一个老牌的免费空间服务商,从2005年开始提供免费PHP空间服务。距今已有14年的时间,真没想到一款免费主机能活这么长时间。FreeWe…

    2022年10月8日
    0
  • python中怎样换行输出_python换行继续输入

    python中怎样换行输出_python换行继续输入python输出换行的方法:1、用转义符号【\n】,代码为【str3=”..\n”】;2、直接用print输出一个空行,代码为【print(str1);print(“”);print(str2)】。本教程操作环境:windows7系统、python3.9版,DELLG3电脑。python输出换行的方法:方法1:用转义符号。str3=”我不见,万古英雄曾拔剑,铁笛高吹龙夜吟\n”st…

    2025年6月22日
    1
  • APAP算法详解和VS代码实现「建议收藏」

    APAP算法详解和VS代码实现「建议收藏」前段时间由于学习需要好好研究了一下APAP,由于对Matlab不熟悉,并且没有Matlab和C++混合编程的经验,因此看到原作者的代码的时候真的是头疼,我只能一点点的去测试语句,这里很感谢这位博主的详尽文章思路分析,可能有些人看这个就懂了。https://blog.csdn.net/chentianting/article/details/88869872这里也要感谢一下这位博主,我们的交流让…

    2022年9月22日
    1
  • Win10运行PS很卡,分享几种解决Win10用PS卡顿提速设置方法

    Win10运行PS很卡,分享几种解决Win10用PS卡顿提速设置方法转载自品略图书馆http://www.pinlue.com/article/2020/04/0117/3410102560823.html最近升级了Win10系统,安装了PS软件准备工作,但是命使用中发现PS很卡,卡顿问题比较明显,极度的影响使用,那么如何解决呢?下面小编整理了解决方法,相信通过以下的设置之后,PS卡顿问题可以解决。与自定义配置是有很大关系的。特别是一些新功能的加入,在一些低配置电脑上往往会有事倍功半的“奇效”。如果你的PS用起来很卡,不妨赶快检查以下几个选项,可以瞬间提速1..

    2022年5月7日
    100

发表回复

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

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