数据结构——树(二叉树代码总结)上

本文主要总结了数据结构中二叉树的相关概念,并提供了常见的二叉树操作的代码实现,包括插入、删除和遍历等基本操作,旨在帮助读者深入理解二叉树的逻辑与应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*二分查找即为判定树*/ 
int binarysearch(list tbl,elementtype k)
{
	int left,right,mid,nofound=-1;
	left=1;
	right=tbl->length;
	while(left<=right)
	{
		mid=(left+right)/2;
		if(k<tbl->element[mid]) right=mid-1;
		else if(k>tbl->element[mid]) left=mid+1;
		else return mid;
	}
	return notfound;
 } 
//树的各种操作
//链表的数据结构
typedef struct treenode *bintree;
typedef bintree position;
struct treenode{
	elementtype data;
	bintree left;
	bintree right;
}
 //二叉树的遍历
 //先序遍历
 void preordertraversal(bintree bt)
 {
 	if(bt)
 	{
 		printf("%d",bt->data);
 		preordertraversal(bt->left);
 		preordertraversal(bt->right);
	 }
 }
 //中序遍历
 void inordertraversal(bintree bt)
 {
 	if(bt)
 	{
 		inordertraversal(bt->left);
 		printf("%d",bt->data);
 		intordertraversal(bt->right);
	 }
  } 
 //后序遍历
 void  postordertraversal(bintree bt)
 {
 	if(bt)
 	{
 		postordertraversal(bt->left);
 		postordertraversal(bt->right);
 		printf("%d",bt->data);	
	 }
 }
 //二叉树的非递归遍历
 //中序遍历非递归遍历算法, 使用堆栈
  void inordertraversal(bintree bt)
  {
  	bintree t=bt;
  	stack s=creatstack(maxsize);//创建并初始化堆栈S 
  	while(t||!isempty(s))
  	{
  		while(t) //一直向左并将沿途节点压入堆栈 
  		{
  			push(s,t);
  			t=t->left;
		}
		if(!isempty(s))
		{
			t=pop(s);  //节点弹出堆栈  
			printf("%5d",t->data); //访问并打印节点 
			t=t->right;//转向 右子树 
		 } 
	  }
  }
  //先序遍历非递归遍历算法, 使用堆栈
  void inordertraversal(bintree bt)
  {
  	bintree t=bt;
  	stack s=creatstack(maxsize);//创建并初始化堆栈S 
  	while(t||!isempty(s))
  	{
  		while(t) //一直向左并将沿途节点压入堆栈 
  		{
  			printf("%5d",t->data); //访问并打印节点 
  			push(s,t);
  			t=t->left;
		}
		if(!isempty(s))
		{
			t=pop(s);  //节点弹出堆栈  
			t=t->right;//转向 右子树 
		 } 
	  }
  }
  //层序遍历
   /*队列实现  节点出队,访问该节点,其左右儿子入队*/
    void levelordertraversal(bintree bt)
	{
		queue q;
		bintree t;
		if(!bt) return ;//如果是空树,直接返回
		q=creatqueue(maxsize); //创建并初始化队列q 
		addq(q,bt);
		while(!isemptyq(q))
		{
			t=deleteq(q);
			printf("%d\n",t->data);//访问去除队列的节点 
			if(t->left) addq(q,t->left);
			if(t->right) addq(q,t->right);
		 } 
	 } 
  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值