排序二叉树的实现

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

排序二叉树的实现

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 三条平行线与等边三角形

    三条平行线与等边三角形偶然在网上看到一道有意思的几何题,仔细思考了一下,确实有点趣。原题是:平面上有任意三条平行线,使用尺规则作图画出一个等边三角形,使三角形的三个顶点分别在三条平行线上。画法有好多种,搜集网上的一些画法,先介绍4种,再讨论一下三角形连长与平等线距离的关系,最后讨论下第二种画法的变化(三角形边长的唯一性未证明)。第一种:作图顺序:(颜色顺序:红—>绿—>蓝—>紫)1.在三条…

  • 【CSS】CSS样式表+复合选择器

    【CSS】CSS样式表+复合选择器CSS样式表+复合选择器总结

  • 虚拟村庄java_虚拟村庄怎么玩?[通俗易懂]

    虚拟村庄java_虚拟村庄怎么玩?[通俗易懂]那个人生病了,找另外一个人帮他治病1。生火。首先,要一个村民(成年的)到左下方拿干木柴;然后,再要他去左上方去拿干草(位置是海的最上方的一堆花的地方);等他都拿齐后,他都会放到村子中间的一圈石头围成的圈中,这时你再把他拖放到上面他就会生火了。2。水坝。这个任务需要你把村民培养成masterbuilder,而且要工程技术(Engineering)达到2级,否则不会成功。把masterbuil…

    2022年10月22日
  • 他们做了个艰难的决定

    他们做了个艰难的决定
    可口可乐做了个艰难的决定,如果监测到用户胃里有百事可乐,将自动释放农药和汞。
    中石化做了个艰难的决定,如果监测到用户汽车油箱里有中石油,将自动释放电火花。
    肯德基做了个艰难的决定,如果监测到用户吃过有麦当劳,将自动释放牛屎。
    百度做了个艰难的决定,如果监测到用户浏览Google,将自动封禁百度ID。。。
    联通做了个艰难的决定,如果方圆百米内检测到有移动用户将使这些用户不间断自动拨打110
    郭小四做了一个艰难的决定,如果发现读者的脑袋里

  • Johnson算法「建议收藏」

    Johnson算法「建议收藏」为什么80%的码农都做不了架构师?>>>…

    2022年10月22日
  • 哈希表的数据结构[通俗易懂]

    转载自:https://www.jianshu.com/p/b468abd86f61Hash表的结构图:数组+链表哈希表(Hashtable,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表白话一点的说就是通过把Key通过一个固定的算法函数(hash函数)转换成一个整型数字,然后就对该数字对数组的长度进行取余,取余结果就

发表回复

您的电子邮箱地址不会被公开。

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