收藏||二叉树的遍历:颜色标记法(前序、中序、后序通用)
参考力扣题解
作者: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;}
}
收藏||二叉树的遍历:颜色标记法(前序、中序、后序通用)相关推荐
- 二叉树的前序中序后序三种遍历方式及递归算法介绍
二叉树三种遍历方式 二叉树的遍历是整个二叉树的核心,二叉树的几本操作都要依赖于遍历,对于二叉树的遍历,递归是最简单也最容易理解的,本文详细介绍了二叉树的三种遍历方法,并用递归来实现: 完整的可调试代码 ...
- 数据结构与算法实验 实验6:二叉树ADT的二叉链式实现 (由完全前序序列创建二叉树 / 求二叉树的节点数/树高/叶子节点数 /先序中序后序层序遍历)
假设二叉数的数据元素为字符,采用二叉链式存储结构.请编码实现二叉树ADT,其中包括创建二叉树.遍历二叉树(深度.广度).求二叉树的深度(高度).计算二叉树的元素个数.计算二叉树的叶子数.二叉树的格式输 ...
- 二叉树的前序中序后序遍历图示
网上找了几张二叉树的图片,自己写了三种遍历的顺序,跟原文比较过,一致的 示例1 前序遍历: ABDXYCEGF 中序遍历: XDYBAGECF 后序遍历: XYDBGEFCA 示例2 前序遍历: AB ...
- 二叉树的前序中序后序遍历
二叉树的前序中序后序遍历 二叉树的遍历 前序遍历 中序遍历 后序遍历 总结 二叉树的遍历 二叉树的遍历有前序遍历,中序遍历,后序遍历三种. 今天我把二叉树的遍历方法给大家总结一下,也算对我自己学习的一 ...
- 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法
本文主要介绍二叉树前序中序后序遍历的非递归写法 在探讨如何写出二叉树的前序中序后序遍历代码之前,我们先来明确一个问题,前序中序后序遍历根据什么区分? 二叉树的前序中序后序遍历,是相较根节点说的.最先遍 ...
- 二叉树的前序中序后序遍历java代码实现
1.前序遍历概述 前序遍历(VLR) 是二叉树遍历的一种,也叫做先根遍历.先序遍历.前序周游,可记做根左右.前序遍历首先访问根结点然后遍历左子树,最后遍历右子树. 若二叉树为空则结束返回,否则: (1 ...
- 二叉树遍历(递归实现前序/中序/后序遍历)
1. 准备工作 我们先定义一棵普通的二叉树,如下图 2. 前序遍历 通过递归进行遍历: 如果二叉树为空,则操作返回: 如果非空,否则从根结点开始,然后遍历左子树,再遍历右子树. 前序遍历的结果是:AB ...
- C++用类实现二叉树的创建,前序中序后序遍历(附完整代码)
C++用类实现二叉树的创建,前序中序后序遍历(附完整代码) 前序.中序.后序遍历 直接上代码 前序.中序.后序遍历 二叉树的遍历分为前序遍历,中序遍历和后序遍历三种遍历方法.前序遍历的顺序为" ...
- 二叉树顺序存储-实现前序中序后序遍历
一.顺序存储二叉树简介 二叉树的存储结构有两种,分别为顺序存储和链式存储. 二叉树的顺序存储,指的是使用顺序表(数组)存储二叉树.只有完全二叉树才可以使用顺序表存储.因此,如果我们想顺序存储普通二叉树 ...
- 二叉树前序中序后续线索树_二叉树的先序,中序,后序遍历以及线索二叉树的遍历...
二叉树的先序,中序,后序遍历以及线索二叉树的遍历 (2008-05-04 17:52:49) 标签: 杂谈 C++ 二叉树的先序,中序,后序遍历以及线索二叉树的遍历 头文件 //*********** ...
最新文章
- tar自动打包指定文件夹中的文件到指定目录
- python能做什么
- 轻量级数据持久层Seaking.PL简介及建议征集
- jupyter安装出现问题:安装后无法打开
- 简明 Vim 练级攻(转自coolshell)
- 2 Linux磁盘管理
- centos 设置时间为北京时间
- CI加载model的问题
- [kuangbin带你飞]专题四 最短路练习
- @cosme宣布“@cosme THE BEST COSMETICS AWARDS 2020 ”@cosme上半年美妆新品大赏榜单中获奖新产品
- E71(S60 3rd)通话录音软件 -终极录音- 的用法
- 项目成本管理:成本与成本管理概念
- 修改最新版谷歌浏览器编码方式
- 【XLSX】Excel表格的导入和导出
- SpringBoot之下载Excel
- 神奇的多项式求导矩阵与积分矩阵
- Python 的一些日常高频写法总结!
- 【bzoj3687】简单题
- 【Linux驱动编程】Linux中断上半部和下半部
- Android挂逼修炼之行---微信摇骰子和猜拳作弊器原理解析 (转载)