标签:printf 算法 树的遍历 article 遍历二叉树 maxsize max 后序 name
//先序遍历二叉树的递归实现
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",T->data);//訪问根结点
stack[top++]=p;//将p入栈
p=p->lchild;//遍历左子树
}
if(top>0)//假设栈不空
{
p=stack[--top];//栈顶元素出栈
p=p->rchild;//遍历右子树
}
}
}
二叉树的中序遍历
//中序遍历二叉树的递归实现
void PreOrderTraverse(BiTree T)
{
if(T)
{
PreOrderTraverse(T->lchild);//中序遍历左子树
printf("%2c",T->data);//訪问根结点
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不空,訪问根结点,遍历左子树
{
stack[top++]=p;//将p入栈
p=p->lchild;//遍历左子树
}
if(top>0)//假设栈不空
{
p=stack[--top];//栈顶元素出栈
printf("%2c",T->data);//訪问根结点
p=p->rchild;//遍历右子树
}
}
}//后序遍历二叉树的递归实现
void PreOrderTraverse(BiTree T)
{
if(T)
{
PreOrderTraverse(T->lchild);//后序遍历左子树
PreOrderTraverse(T->rchild);//后序遍历右子树
printf("%2c",T->data);//訪问根结点
}
}
//二叉树的后序遍历非递归算法
void PreOrderTraverse(BiTree T)
{
BiTree stack[MAXSIZE];//定义一个栈。用于存放结点的指针
int top;//定义栈顶指针
BitNode *p,*q;//定义结点的指针
top=0;//初始化栈
p=T,q=NULL;
while(p!=NULL||top>0)
{
while(p!=NULL)//假设p不空。訪问根结点。遍历左子树
{
stack[top++]=p;//将p入栈
p=p->lchild;//遍历左子树
}
if(top>0)//假设栈不空
{
p=stack[top-1];//取栈顶元素
if(p->rchild==NULL||p->rchild==q)
//假设p没有右孩子结点,或者右孩子结点已经訪问过
{
printf("%2c",T->data);//訪问根结点
q=p;
p=NULL;
top--;//出栈
}
else
p=p->rchild;
}
}
}
标签:printf 算法 树的遍历 article 遍历二叉树 maxsize max 后序 name
原文地址:http://www.cnblogs.com/gccbuaa/p/6814213.html