排序二叉树的实现

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


相关推荐

  • action context_session.getAttribute

    action context_session.getAttributeformURL:http://apps.hi.baidu.com/share/detail/16057446 ActionContext(Action上下文)ActionContext介绍通过上面用户注册例子的学习,我们知道Xwork与Web无关性,我们的Action不用去依赖于任何Web容器,不用和那些JavaServlet复杂的请求(Request)、响应(Respon

    2025年10月11日
    3
  • 域渗透之Zerologon域提权漏洞

    域渗透之Zerologon域提权漏洞组件概述Netlogon远程协议是一个远程过程调用(RPC)接口,用于基于域的网络上的用户和计算机身份验证。Netlogon远程协议RPC接口还用于为备份域控制

    2021年12月13日
    62
  • Centos防火墙开放端口

    Centos防火墙开放端口今天在服务器上启动了一个http服务,代码中绑定的端口号是9706,没有绑定IP。但是出现了一个问题,就是服务只能在本地访问,在别的机器上访问不了。在别的机器上telnet这个端口也是不通的,如下(ip脱敏处理了):$telnet<server-ip>9707Trying<server-ip>…telnet:connecttoaddress<server-ip>:Connectionrefusedtelnet:Unabletoc

    2022年6月16日
    30
  • keepalived 保证集群的高可用

    keepalived 保证集群的高可用

    2021年5月28日
    107
  • traceroute 工作原理

    traceroute 工作原理文章目录PINGTracerouteTraceroute的工作原理举个“栗子”PINGICMP的一个重要应用就是分组网间探测PING(PacketInterNetGroper),用来测试两台主机之间的连通性。PING使用了ICMP回送请求与回送回答报文。PING是应用层直接使用网络层ICMP的一个例子。他没有通过传输层的TCP或UDP。TracerouteICMP的另一个非常有用的应用是traceroute(这是UNIX操作系统中名字),它用来跟踪一个分组从源点到

    2022年6月20日
    26
  • DSP28335 Flash烧写

    DSP28335 Flash烧写一.切换为Flash烧写版本方法//1.将主程序中的:MemCopy(&amp;amp;amp;RamfuncsLoadStart,&amp;amp;amp;RamfuncsLoadEnd,&amp;amp;amp;RamfuncsRunStart);//InitFlash();//两个函数取消注释//2.将工程中的28335_RAM_lnk.cmd从工程中删除,添加CMD文件夹下的F283…

    2022年8月30日
    5

发表回复

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

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