(二)二叉树的抽象数据类型定义及遍历

类型名称 :二叉树

数据对象集 :一个有穷的结点集合。若不为空,则由根节点和其左、右二叉子树组成。

操作集:

Boolean isEmpty ( BinTree BT ); //判别BT是否为空
void Traversal ( BinTree BT ); //遍历,按某个顺序访问每一个结点
BinTree CreatBinTree ();      //创建一个二叉树
//常见的遍历方法有:
void PreOrderTraversal ( BinTree BT ); //先序 ----- 根 、左子树、右子树
void InOrderTraversal ( BinTree BT ); //中序 ----- 左子树、根、右子树
void LevelOrderTraversal ( BinTree BT ); //后序遍历-----左子树、右子树、根


(1)先序遍历

遍历过程:1、访问根节点 。2、访问左子树。3、访问右子树。 

void PreOrderTraversal(BinTree BT)
{
	if(BT){
		printf("%d",BT->Data);
		PreOrderTraversal(BT->Left); 
		PreOrderTraversal(BT->Right);
	}
}


(2)中序遍历

遍历过程:1、访问左子树。2、访问根节点。3、访问右子树


void InOrderTraversal(BinTree BT) //中序遍历
{
	if(BT){
		InOrderTraversal(BT->Left);
		printf("%d",BT->Data);
		InOrderTraversal(BT->Right);
	}
}
(3)后序遍历

遍历过程:1、访问左子树。2、访问右子树。3、访问根节点

void LevelOrderTraversal(BinTree BT)//后序遍历
{
	if(BT){
		LevelOrderTraversal(BT->Left);
		LevelOrderTraversal(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){ /*一直向左并将沿途结点压入堆栈*/
			Push(S,T);
			printf(“%5d”, T->Data); /*(访问)打印结点*/
			T = T->Left;
		}
		if(!IsEmpty(S)){
			T = Pop(S); /*结点弹出堆栈*/
			T = T->Right; /*转向右子树*/
		}
	}
}




  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值