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

类型名称 :二叉树

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

操作集:

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; /*转向右子树*/
		}
	}
}




相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页