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

二叉树的中序遍历非递归算法java_二叉树遍历例题解析*非递归算法思想:  (1)设置一个栈S存放所经过的根结点(指针)信息;初始化S; (2)第一次访问到根结点并不访问,而是入栈;  (3)中序遍历它的左子树,左子树遍历结束后,第二次遇到根结点,就将根结点(指针)退栈,并且访问根结点;然后中序遍历它的右子树。 (4)当需要退栈时,如果栈为空则结束。     代码实现:void…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

*非递归算法思想:

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

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

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

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

 

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

 

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

 

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

 

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

 

代码实现:

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); //父结点未访问,或右子树未遍历
 }

 

 

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

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

 

后序遍历

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

 

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193839.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 502 Bad Gateway 常见解决思路

    502 Bad Gateway 常见解决思路一般在访问某些网站或者我们在做本地测试的时候,服务器突然返回502BadGatewayNginx,这种问题相信大家也遇到不少了,这里我再总结下几种处理方式,有缺少或者错误的希望有大神能指出。一般的思维:502,说明服务器没有响应,也就是我们的web服务器没有接到有效的信息导致的。产生错误的原因主要是:连接超时,我们向服务器发送请求由于服务器当前链接太多,导致服务器方面无…

    2022年6月29日
    30
  • Quercus_Quercus salicina

    Quercus_Quercus salicina其实,我不确定Quercus是否可以被认定为一门JVM语言;其次Quercus这个东东分开源版与商业版,开源版只能解释执行、而商业版能编译成Java字节码。但我知道国内,阿里巴巴很早就在使用它,当然,

    2022年8月5日
    2
  • docker菜鸟教程_k8s部署docker镜像

    docker菜鸟教程_k8s部署docker镜像前记:最近跟着哔站码神之路做了一个SpringBoot练手项目,第一次操作碰到了很多困难和问题,尤其是在部署部分,走了很多弯路,这里写下自己的部署过程,供大家参考,也欢迎大家提出宝贵的意见。哔站码神视频链接:https://www.bilibili.com/video/BV1Gb4y1d7zb?p=36我的网站:www.zhangshidi.space前置知识以下知识点希望大家首先搜一搜,读一读,有一个大概的了解。什么是Linux以及掌握Linux的一些基本指令。什么是docke

    2022年10月19日
    0
  • linux运维面试题大厂,大厂Linux运维面试题详解「建议收藏」

    linux运维面试题大厂,大厂Linux运维面试题详解「建议收藏」大厂面试题:网络基础类面试题01.Linux运维经典面试题_网络基础-视频介绍02.Linux运维经典面试题_网络基础-面试题103.Linux运维经典面试题_网络基础-面试题204.Linux运维经典面试题_网络基础-面试题3Linux系统管理类面试题05.Linux运维经典面试题_Linux系统管理类-权限优化06.Linux运维经典面试题_Linux系统管理类-备份策略07.Linux运维经…

    2022年5月27日
    31
  • 搭建lnmp=(nginx+mysql+php)

    搭建lnmp=(nginx+mysql+php)

    2021年8月17日
    45
  • 内网IP和公网IP的区别

    内网IP和公网IP的区别IP地址对于经常上网的人应该都不陌生,ip地址又可以分成内网ip地址和公网ip地址,今天就来简单介绍下这两者的区别。通常我们所说的内网也就是局域网,是内网的计算机以网络地址转换协议,通过一个公共的网关访问Internet。而内网的计算机也可以向Internet上的其他计算机发送连接请求。但是但Internet上其他的计算机无法向内网的计算机发送连接请求。为了简单理解我们就以网吧的网络举个列子,网吧的网线都是连接在同一个交换机上面的,也就是说它们的IP地址是由交换机或者路由器进行分配的。而且每…

    2022年4月29日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号