更新时间:2015-10-08 17:25:09浏览次数:1+次
依据二叉树的先序递归定义,可以得到二叉树的先序递归算法。
void PreOrderTraverse(BiTree T)
/*先序遍历二叉树的递归实现*/
{
if(T) /*如果二叉树不为空*/
{
printf(“%2c”,T->data); /*访问根结点*/
PreOrderTraverse(T->lchild); /*先序遍历左子树*/
PreOrderTraverse(T->rchild); /*先序遍历右子树*/
}
}
二叉树的先序遍历非递归算法实现如下。
void PreOrderTraverse(BiTree T)
/*先序遍历二叉树的非递归实现*/
{
BiTree stack[MaxSize]; /*定义一个栈,用于存放结点的指针*/
int top; /*定义栈顶指针*/
BitNode *p; /*定义一个结点的指针*/
top=0; /*初始化栈*/
p=T;
while(p!=NULL||top>0)
{
while(p!=NULL) /*如果p不空,访问根结点,遍历左子树*/
{
printf(“%2c”,p->data); /*访问根结点*/
stack[top++]=p; /*将p入栈*/
p=p->lchild; /*遍历左子树*/
}
if(top>0) /*如果栈不空*/
{
p=stack[--top]; /*栈顶元素出栈*/
p=p->rchild; /*遍历右子树*/
}
}
}
以上算法是直接利用数组来模拟栈的实现,当然也可以定义一个栈类型实现。如果用第四章的链式栈实现,需要将数据类型改为指向二叉树结点的指针类型。
相关资讯