使用栈,非递归中序遍历二叉树T

/**********
【题目】试利用栈及其基本操作写出二叉树T的非递归
的中序遍历算法。
二叉链表类型定义:
typedef struct BiTNode {
  TElemType  data;
  struct BiTNode  *lchild,*rchild;
} BiTNode, *BiTree;
可用栈类型Stack的相关定义:
typedef BiTree SElemType;   // 栈的元素类型
Status InitStack(Stack &S);
Status StackEmpty(Stack S);
Status Push(Stack &S, SElemType e);
Status Pop(Stack &S, SElemType &e);
Status GetTop(Stack S, SElemType &e);
**********/

void InOrder (BiTree T, Status (*visit) (TElemType e) ) {  //中序非递归遍历二叉树T,visit是对数据元素操作的应用函数
LStack S; InitStack  (S);
BiTree p= T;
while(p->lchild) {    //从T结点出发,沿左分支走到底,找到最左下的结点,沿途结点指针入栈
Push (S,p); p=p->lchild; } 
while(p){
visit(p->data);   //访问结点
if(p->rchild) {  //若当前结点有右孩子
p=p->rchild;
while(p->lchild) {
Push (S,p); p=p->lchild; }  //令p指向其右孩子为根的子树的最左下结点,沿途结点指针入栈
}
else if (!StackEmpty (S) )
Pop(S,p);  //栈不空时退栈
else p=NULL;  //栈空表明遍历结束
}

}



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值