二叉树的建立,删除,查找,插入,输出(数据结构)

16 篇文章 0 订阅
11 篇文章 0 订阅


1. 建立二叉树


void pre_crt(tree &bt)//按先序顺序输入二叉树中节点的值,生成
{
	char ch;
	ch=getchar();//二叉树的单链表存储结构,bt为指向根节点的指针,,'$'表示空树 
 	if(ch!='$')
	 {
	 	bt=new node;//建根节点
		bt->data=ch;
		pre_crt(bt->lchild);
		pre_crt(bt->rchild); 
	 }
	 else bt=NULL; 
} 



2. 删除节点


void dis(tree &bt)
{
	if(bt)
	{
		dis(bt->lchild);//删左子树
		dis(bt->rchild);//删右子树
		delete bt;//释放父节点 
	}
}


3. 在二叉排序树中插入一个数

二叉排序树又称“二叉查找树”、“二叉搜索树”。(左小右大)http://www.cnblogs.com/zhuyf87/archive/2012/11/09/2763113.html

二叉排序树:或者是一棵空树,或者是具有下列性质的二叉树:

1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;

2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;

3. 它的左、右子树也分别为二叉排序树。

 

二叉排序树通常采用二叉链表作为存储结构。


void insert(tree &bt,int n)//插入一个节点到排序二叉树中 
{
	if(bt)
	{
		if(n<bt->data) insert(bt->lchild,n);
		else if(n>bt->data) insert(bt->rchild,n); 
	}
	else
	{
		bt=new node;//新开一个空间
		bt->data=n;
		bt->lchild=bt->rchild=NULL; 
	}
} 



4. 在二叉排序树中查找一个数


找到返回该节点,否则返回NULL

tree findn(tree bt,int n)
{
	if(bt)
	{
		if(n<bt->data) findn(bt->lchild,n);
		else if(n>bt->data) findn(bt->rchild,n);
		else return bt;
	}
	else return NULL;
}

5. 用嵌套括号表示法输出一棵二叉树

void print(tree bt)
{
	if(bt)
	{
		cout<<bt->data;
		if(bt->lchild||bt->rchild)
		{
			cout<<'(';
			print(bt->lchild);
			if(bt->rchild) cout<<',';
			print(bt->rchild);
			cout<<')';
		}
	}
}

结论:已知先序序列和中序序列可以确定出二叉树;

     已知中序序列和后序序列也可以确定出二叉树;

  但,已知先序序列和后序序列却不可以确定出二叉树; 


  例如:已知结点的先序序列为ABCDEFG,中序序列为CBEDAFG。可以唯一构造出二叉树。过程见下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值