当前位置: 首页 > news >正文

利用双端队列 实现二叉树的非递归的中序遍历

双端队列:双向队列:支持插入删除元素的线性集合。
java官方文档推荐用deque实现栈(stack)。

pop(): 弹出栈中元素,也就是返回并移除队头元素,等价于removeFirst(),如果队列无元素,则发生NoSuchElementException
push(): 向栈中压入元素,也就是向队头增加元素,等价于addFirst(),如果元素为null,则发生NPE,如果栈空间受到限制,则发生IllegalStateException

代码:

public void inOrderByStack(Node node) {System.out.println("中序非递归遍历");Deque stack=new LinkedList();//创建一个双端队列Node current =root;while (current!=null||!stack.isEmpty()){//栈非空while(current!=null){stack.push(current);//把current压zhancurrent=current.leftChild;//把current的左孩子节点赋值给它}if (!stack.isEmpty()) {current =(Node) stack.pop();//栈非空就出栈System.out.println(current.value);current=current.rightChild;//遍历右孩子}}}

二叉树图如下:

        root节点=Node1,把Node1的值赋值给current,current 值不为null

把current 值压栈,Node1的值压栈;Node4的值赋值给curent;

 stack.push(current);//把current压zhancurrent=current.leftChild;

   再判断4是否为null,把4的值压栈,current=null(Node4 )没有左孩子

判断为否定,跳出循环

stack非空,cuurrent =等于刚被压栈的Node4;输出Node4,并且把Node5的值赋值给current

再次回到第一个循环:

 while(current!=null){stack.push(current);//把current压zhancurrent=current.leftChild;//把current的左孩子节点赋值给它}

       Node5压栈,然后把null赋值给curent

再次判断不满足,此时current为Node5,输出5,再把Node5的右孩子赋值给current

经过while循环判断:

while (current!=null||!stack.isEmpty())

stack非空继续执行while 

把null值压栈,current=null的左孩子还是null

判断if还是非空,那么把Node1的值赋值给current并且输出1,

把1的右孩子赋值给current,不再赘述                

http://www.lryc.cn/news/403057.html

相关文章:

  • 昇思25天学习打卡营第18天 | 基于MindSpore的GPT2文本摘要
  • 科研绘图系列:R语言circos图(circos plot)
  • 追踪Conda包的踪迹:深入探索依赖关系与管理
  • 苹果电脑pdf合并软件 苹果电脑合并pdf 苹果电脑pdf怎么合并
  • axios(ajax请求库)
  • Ideal窗口中左右侧栏消失了
  • 麦芒30全新绽放,中国电信勾勒出AI手机的新方向
  • ​数据结构之初始二叉树(3)
  • egret 白鹭的编译太慢了 自己写了一个
  • <数据集>pcb板缺陷检测数据集<目标检测>
  • 实验四:图像的锐化处理
  • 【Linux】权限的管理和Linux上的一些工具
  • ES6 字符串的新增方法(二十)
  • 如何将MP3或WAV文件解码成PCM文件
  • OpenAI 推出 GPT-4o mini,一种更小、更便宜的人工智能模型
  • Nacos 服务发现(订阅)源码分析(服务端)
  • DICOM CT\MR片子免费在线查看工具;python pydicom包加载查看;mayavi 3d查看
  • VSCode远程连接Ubuntu/Linux
  • 【Nginx80端口被占用】80端口被System占用如何解决【已解决】
  • 云计算的发展历程与边缘计算
  • 199.二叉树的右视图(DFS)
  • 机器学习基础入门(1)
  • mybatis的xml中,where标签不自动删除多余的and之类的问题
  • RK3588 编译opencvopencv_contrib记录
  • Eureka: 微服务架构中的服务发现与注册实践
  • 8、添加第三方包
  • 【算法】算法模板
  • 特征工程方法总结
  • Unity | AssetBundle
  • 【虚幻引擎】C++网络通信TCP和HTTP实战开发全流程,以接入科大讯飞星火大模型和文心一言千帆大模型为案例讲解