数据结构期末考前复习(10)

本文介绍了二叉树的两种主要存储结构——顺序存储和链式存储,并详细讲解了三种基本遍历方法(先序、中序、后序)的递归与非递归实现,还涉及了如何构建二叉树及线索二叉树的概念。

数和二叉树

二叉树

二叉树的存储结构

1.顺序存储结构

//二叉树顺序存储表示
#define MAX_TREE_SIZE 100
typedef TElemType SqBiTree[MAX_TREE_SIZE];
SqBiTree bt; 
 

2.链式存储结构

//二叉树的二叉链表存储表示
typedef struct BiTNode
{
	TElemType data;
	struct BiNode *lchild,*rchild;//左右孩子指针 
} BiTNode,*BiTree;

遍历二叉树和线索二叉树

遍历二叉树

若限定先左后右,则存在3种遍历情况:

1.先序遍历二叉树:根左右

2.中序遍历二叉树:左根右

3.后序遍历二叉树:左右根

算法

实现先序遍历(一种递归方法)

//采用二叉链表存储结构,Visit是对数据元素操作的应用函数
Status PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e))
//先序遍历二叉树T的递归算法,对每个数据元素调用函数Visit 
{
	/*最简单的Visit函数是:
		Status PrintElement(TElemType e)
		{
			printf(e);
			return OK;
		}
		调用示例:PreOrderTraverse(T,PrintElement);
	*/
	if(T)
	{
		if(Visit(T->data))
		{
			if(PreOrderTraverse(T->lchild,Visit))//递归,遍历左孩子
				if(PreOrderTraverse(T->rchild,Visit)) //递归,遍历右孩子
					return OK;
			return ERROR; 
		}
	} 
	else return OK; 
} 

实现中序遍历(一种非递归方法)

//采用二叉链表存储结构,Visit是对数据元素操作的应用函数
Status InOrderTraverse(BiTree T,Status(*Visit)(TElemType e))
//中序遍历二叉树T的非递归算法,对每个数据元素调用函数Visit 
{
	InitStuck(S);//建栈
	p=T;//指针
	while(p||!StackEmpty(S))
	{
		if(p) 
		{
			Push(S,p);//根指针进栈
			p=p->lchild;//遍历左子树 
		}
		else
		{
			Pop(S,p); //根指针退栈
			if(!Visit(p->data))//访问根结点 
				return ERROR;
			p=p->rchild;//遍历右子树 
		} 
	} 
	return OK; 
}

建树(先序次序)

//按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树
//构造二叉链表表示的二叉树T
Status CreateBiTree(BiTree &T)
{
	scanf(&ch);
	if(ch==' ')
	{
		T=NULL;
	}
	else
	{
		if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))  exit(OVERFLOW);
		T->data=ch;//生成根节点
		CreateBiTree(T->lchild);//构造左子树 
		CreateBiTree(T->rchild);//构造右子树 
	}
	return OK; 
} 

线索二叉树

lchildLTagdataRTagrchild

其中:

LTag=0    lchild域指示结点的左孩子

LTag=1    lchild域指示结点的前驱

RTag=0   rchild域指示结点的右孩子

RTag=1   rchild域指示结点的后驱

1.二叉树的二叉线索存储表示 p133

2.线索遍历算法 p134

3.建立中序线索化链表 p134、135

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值