参考力扣题解
作者:hzhu212
链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal/solution/yan-se-biao-ji-fa-yi-chong-tong-yong-qie-jian-ming/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

此思路复杂度低,且简洁易懂,对于前序、中序、后序遍历,能够写出完全一致的代码,只需要调整左右节点的入栈顺序即可。
(注:由于栈FIFO的特性,入栈顺序应与遍历顺序相反,如中序遍历为左、中、右,则入栈顺序为右、中、左。)

核心思想如下:

  • 使用颜色标记节点的状态,新节点为白色,已访问的节点为灰色。
  • 如果遇到的节点为白色,则将其标记为灰色,然后将其右子节点、自身、左子节点依 次入栈。
  • 如果遇到的节点为灰色,则将节点的值输出。
public class 二叉树的中序遍历_94 {class ColorNode {TreeNode node;String color;public ColorNode(TreeNode node, String color) {this.node = node;this.color = color;}}public List<Integer> inorderTraversal(TreeNode root) {if (root == null) {return new ArrayList<Integer>();}List<Integer> res = new ArrayList<>();Stack<ColorNode> stack = new Stack<>();stack.push(new ColorNode(root, "white"));while (!stack.empty()) {ColorNode cn = stack.pop();if (cn.color.equals("white")) {if (cn.node.right != null) {stack.push(new ColorNode(cn.node.right, "white"));}stack.push(new ColorNode(cn.node, "gray"));if (cn.node.left != null) {stack.push(new ColorNode(cn.node.left, "white"));}} else {res.add(cn.node.val);}}return res;}
}

收藏||二叉树的遍历:颜色标记法(前序、中序、后序通用)相关推荐

  1. 二叉树的前序中序后序三种遍历方式及递归算法介绍

    二叉树三种遍历方式 二叉树的遍历是整个二叉树的核心,二叉树的几本操作都要依赖于遍历,对于二叉树的遍历,递归是最简单也最容易理解的,本文详细介绍了二叉树的三种遍历方法,并用递归来实现: 完整的可调试代码 ...

  2. 数据结构与算法实验 实验6:二叉树ADT的二叉链式实现 (由完全前序序列创建二叉树 / 求二叉树的节点数/树高/叶子节点数 /先序中序后序层序遍历)

    假设二叉数的数据元素为字符,采用二叉链式存储结构.请编码实现二叉树ADT,其中包括创建二叉树.遍历二叉树(深度.广度).求二叉树的深度(高度).计算二叉树的元素个数.计算二叉树的叶子数.二叉树的格式输 ...

  3. 二叉树的前序中序后序遍历图示

    网上找了几张二叉树的图片,自己写了三种遍历的顺序,跟原文比较过,一致的 示例1 前序遍历: ABDXYCEGF 中序遍历: XDYBAGECF 后序遍历: XYDBGEFCA 示例2 前序遍历: AB ...

  4. 二叉树的前序中序后序遍历

    二叉树的前序中序后序遍历 二叉树的遍历 前序遍历 中序遍历 后序遍历 总结 二叉树的遍历 二叉树的遍历有前序遍历,中序遍历,后序遍历三种. 今天我把二叉树的遍历方法给大家总结一下,也算对我自己学习的一 ...

  5. 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法

    本文主要介绍二叉树前序中序后序遍历的非递归写法 在探讨如何写出二叉树的前序中序后序遍历代码之前,我们先来明确一个问题,前序中序后序遍历根据什么区分? 二叉树的前序中序后序遍历,是相较根节点说的.最先遍 ...

  6. 二叉树的前序中序后序遍历java代码实现

    1.前序遍历概述 前序遍历(VLR) 是二叉树遍历的一种,也叫做先根遍历.先序遍历.前序周游,可记做根左右.前序遍历首先访问根结点然后遍历左子树,最后遍历右子树. 若二叉树为空则结束返回,否则: (1 ...

  7. 二叉树遍历(递归实现前序/中序/后序遍历)

    1. 准备工作 我们先定义一棵普通的二叉树,如下图 2. 前序遍历 通过递归进行遍历: 如果二叉树为空,则操作返回: 如果非空,否则从根结点开始,然后遍历左子树,再遍历右子树. 前序遍历的结果是:AB ...

  8. C++用类实现二叉树的创建,前序中序后序遍历(附完整代码)

    C++用类实现二叉树的创建,前序中序后序遍历(附完整代码) 前序.中序.后序遍历 直接上代码 前序.中序.后序遍历 二叉树的遍历分为前序遍历,中序遍历和后序遍历三种遍历方法.前序遍历的顺序为" ...

  9. 二叉树顺序存储-实现前序中序后序遍历

    一.顺序存储二叉树简介 二叉树的存储结构有两种,分别为顺序存储和链式存储. 二叉树的顺序存储,指的是使用顺序表(数组)存储二叉树.只有完全二叉树才可以使用顺序表存储.因此,如果我们想顺序存储普通二叉树 ...

  10. 二叉树前序中序后续线索树_二叉树的先序,中序,后序遍历以及线索二叉树的遍历...

    二叉树的先序,中序,后序遍历以及线索二叉树的遍历 (2008-05-04 17:52:49) 标签: 杂谈 C++ 二叉树的先序,中序,后序遍历以及线索二叉树的遍历 头文件 //*********** ...

最新文章

  1. tar自动打包指定文件夹中的文件到指定目录
  2. python能做什么
  3. 轻量级数据持久层Seaking.PL简介及建议征集
  4. jupyter安装出现问题:安装后无法打开
  5. 简明 Vim 练级攻(转自coolshell)
  6. 2 Linux磁盘管理
  7. centos 设置时间为北京时间
  8. CI加载model的问题
  9. [kuangbin带你飞]专题四 最短路练习
  10. @cosme宣布“@cosme THE BEST COSMETICS AWARDS 2020 ”@cosme上半年美妆新品大赏榜单中获奖新产品
  11. E71(S60 3rd)通话录音软件 -终极录音- 的用法
  12. 项目成本管理:成本与成本管理概念
  13. 修改最新版谷歌浏览器编码方式
  14. 【XLSX】Excel表格的导入和导出
  15. SpringBoot之下载Excel
  16. 神奇的多项式求导矩阵与积分矩阵
  17. Python 的一些日常高频写法总结!
  18. 【bzoj3687】简单题
  19. 【Linux驱动编程】Linux中断上半部和下半部
  20. Android挂逼修炼之行---微信摇骰子和猜拳作弊器原理解析 (转载)

热门文章

  1. html+css+小图标,HTML+CSS入门 一个简单实用的CSS loading图标
  2. # 个人日记-电影《关于我妈的一切》观后感-20210922
  3. 爱创科技行业观察:中药全链条监管进入新阶段!
  4. 什么是保健品?保健品引流产品什么样的最好?
  5. 企业中如何做好文化建设?
  6. 2020-11-07 Mybatis
  7. 英语生疏了,每日至少一句吧
  8. cmd窗口太炫酷了,电脑编码软件太多?手把手教你搭建Java环境,利用dos命令实现运行操作
  9. ECharts仪表盘(详细示例——附有具体注释)
  10. 手机保护壳让手机信号变更差?