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

二叉树的后序遍历【非递归版】

本文约定用“打印”这个术语来表示执行某个操作。

在这里插入图片描述

用两个栈来实现

先头节点入栈,然后弹出节点但是接着不打印,而是再次放到一个收集栈里,然后先压左子树再压右子树,这样原本弹出栈的顺序应该是根右左,但是经过这个收集栈之后就变成了左右根,这样的话就能够实现后序遍历。

代码实现

public static List<Integer> postorderTraversal(TreeNode head) {List<Integer> ans = new ArrayList<>();if(head!=null){Stack<TreeNode> stack = new Stack<>();Stack<TreeNode> collect = new Stack<>();stack.push(head);while(!stack.isEmpty()){head = stack.pop();collect.push(head);if(head.left!=null){stack.push(head.left);}if(head.right!=null){stack.push(head.right);}}while (!collect.isEmpty()){ans.add(collect.pop().val);}}return ans;}

用一个栈来实现

刚开始,我们用h来表示头节点,如果始终没有打印过节点,则h就一直是头节点。
一旦打印过节点,则h就变成上一次打印的节点。
如果有左子树并且左子树没有处理过,则左子树进栈。
如果有右子树并且右子树没有处理过,则右子树进栈。
如果左子树、右子树为空或者都处理过了,则打印并将h指向弹出的节点。

代码实现

public static List<Integer> postorderTraversal(TreeNode h) {List<Integer> ans = new ArrayList<>();if(h!=null){Stack<TreeNode> stack = new Stack<>();stack.push(h);while(!stack.isEmpty()){TreeNode cur = stack.peek();if(cur.left!=null&&h!=cur.left&&h!=cur.right){stack.push(cur.left);}else if(cur.right!=null&&h!=cur.right){stack.push(cur.right);}else{ans.add(cur.val);h=stack.pop();}}}return ans;}
http://www.dtcms.com/a/422974.html

相关文章:

  • 一款专门为 WPF 打造的开源 Office 风格用户界面控件库
  • 【Java并发】揭秘Lock体系 -- 深入理解ReentrantLock
  • 数据可视化图表之——气泡图
  • 网站的搭建流程黑科技软件网站
  • 【征文计划】从掌心到像素:深度解析Rokid UXR 2.0的手势识别与自定义交互实战
  • 零知IDE——STM32F407VET6与GP2Y1014AU的粉尘监测系统实现
  • 网站建设怎么创业网站正建设中
  • 网站建站哪个好宁波建设局网站首页
  • Day31_【 NLP _1.文本预处理 _(3)文本数据分析】
  • 金融/财务图表的强大可视化引擎——Highcharts Stock
  • 如何将照片从Mac传输到安卓设备
  • 第四部分:VTK常用类详解(第112章 vtkGlyph2D 2D符号化类)
  • 如何将三星手机的照片传输到Mac——6种可行的方法
  • 《系统与软件工程功能规模测量IFPUG方法》(GB/T42449-2023)标准解读
  • ChatExcel将发布数据分析Mini AI 工作站
  • 通过AWS IAM Policy Simulator进行权限验证和模拟测试
  • AWS Glue ETL 自动化数据清洗:从概念到企业级实战
  • 北京网站优化方法烟台网站网站建设
  • RabbitMQ 和 Kafka 对比
  • 大模型之扩散模型的学习一
  • 做企业网站 空间怎么买简述商务网站建设步骤
  • 做火锅加盟哪个网站好主营商城网站建设
  • 网站维护怎么做wordpress主题无法预览
  • [吾爱大神原创] wx小程序自动解包工具界面版1.0.0
  • Datagrip连接Oracle23的一些异常记录
  • springboot+vue心理健康服务小程序(源码+文档+调试+基础修改+答疑)
  • flink api-datastream api-source算子
  • 基于数据挖掘的在线游戏行为分析预测系统
  • 无极领域付费网站做外贸要访问国外的网站怎么办
  • 本地项目上传到Git仓库