二叉树先序中序后序遍历递归和非递归算法

二叉树遍历详解
本文详细介绍了二叉树的三种遍历方式:先序、中序和后序遍历,并提供了递归与非递归两种实现方法。通过具体代码示例帮助读者深入理解二叉树遍历的基本原理及应用。

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);

}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值