码迷,mamicode.com
首页 > 其他好文 > 详细

排序二叉树的实现

时间:2014-07-29 15:02:28      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:c++   排序二叉树   

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






排序二叉树的实现,布布扣,bubuko.com

排序二叉树的实现

标签:c++   排序二叉树   

原文地址:http://blog.csdn.net/daida2008/article/details/38232263

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!