void PreOrder( BTNode *T) //先序
{
if(T != NULL)
{
printf("%c",T - > data);
PreOrder(T -> lchild);
PreOrder(T -> rchild);
}
}
void PreOrder( BTNode *T) //先序 非递归
{ BTNode *p;
InitStack(s); // 初始化栈
p = T; //p指向根节点
while(p || !StackEmpty(s))
{
if(p)
{
pop(S,p); //将p压栈
if(p != NULL )
{
printf("%c",p - > data);
}
p = p - > lchild;
}
else
{
pop(S,p);
p = p - >rchild;
}
}
}
void InOrder( BTNode *T) //中序
{
if(T != NULL)
{
InOrder(T -> lchild);
printf("%c",T - > data);
InOrder(T -> rchild);
}
}
void InOrder( BTNode *T) //中序 非递归
{ BTNode *p;
InitStack(s); // 初始化栈
p = T; //p指向根节点
while(p || !StackEmpty(s))
{
if(p)
{
pop(S,p); //将p压栈
p = p - > lchild;
}
else
{
pop(S,p);
if(p != NULL )
{
printf("%c",p - > data);
}
p = p - >rchild;
}
}
}
void PostOrder( BTNode *T) //后序
{
if(T != NULL)
{
PostOrder(T -> lchild);
PostOrder(T -> rchild);
printf("%c",T - > data);
}
}
二叉树遍历详解
本文详细介绍了二叉树的三种遍历方式:先序、中序和后序遍历,并提供了递归与非递归两种实现方法。通过具体代码示例帮助读者深入理解二叉树遍历的基本原理及应用。
317

被折叠的 条评论
为什么被折叠?



