首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >二叉树的中序遍历非递归算法java_二叉树遍历例题解析

二叉树的中序遍历非递归算法java_二叉树遍历例题解析

作者头像
全栈程序员站长
发布2022-10-05 11:05:38
发布2022-10-05 11:05:38
5380
举报

大家好,又见面了,我是你们的朋友全栈君。

*非递归算法思想:

(1)设置一个栈S存放所经过的根结点(指针)信息;初始化S;

(2)第一次访问到根结点并不访问,而是入栈;

(3)中序遍历它的左子树,左子树遍历结束后,第二次遇到根结点,就将根结点(指针)退栈,并且访问根结点;然后中序遍历它的右子树。

(4) 当需要退栈时,如果栈为空则结束。

代码实现:

代码语言:javascript
复制
void Midorder(struct BiTNode *t)      //t为根指针 
{ struct BiTNode *st[maxleng];//定义指针栈
  int top=0;                  //置空栈
  do{            
    while(t)               //根指针t表示的为非空二叉树 
    { if (top==maxleng) exit(OVERFLOW);//栈已满,退出
      st[top++]=t;             //根指针进栈
      t=t->lchild;             //t移向左子树
     }   //循环结束表示以栈顶元素的指向为根结点的二叉树
         //的左子树遍历结束
    if (top)                    //为非空栈   
    { t=st[--top];             //弹出根指针
      printf("%c",t->data);    //访问根结点
      t=t->rchild;             //遍历右子树
     }
   } while(top||t); //父结点未访问,或右子树未遍历
 }

依照同样的思维,写的先序遍历非递归模式

代码语言:javascript
复制
void Preorder(struct BiTNode * t){
  struct BiTNode * St[MaxSize], *p;
  int top = 0; 			//置空栈
  if (t! = NULL){
	  St[top++] = t;
    while(top){
	   p = St[--top]; printf("%c ", p->data);
	   if(p->rchild != NULL)
	      St[top++] = p->rchild;
	   if(p->lchild != NULL)
	      St[top++] = p->lchild;
    }
    printf("\n");
  }
}

后序遍历

代码语言:javascript
复制
void Postorder(struct BiTNode * t){
  struct BiTNode * St[MaxSize], *pre;
  int flag, top = 0;
  if (t != NULL){
	  do{
		 while(t != NULL){
		   St[top++] = t; t = t->lchild;
        }
		 pre = NULL; flag = 1;
		 while(top && flag){
          t = St[top-1];
		   if(t->rchild == pre){
		   	printf(“%c ”, t->data); top--;  pre = t;
		   }
		   else{ t=t->rchild; flag = 0;}
	     }
	   }while(top);
	  printf(“\n”); 
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月14日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档