文章目录

  • 前序遍历
  • 中序遍历
  • 后序遍历

递归形式的遍历都会有一个递归栈,因此对于非递归形式也可以使用一个栈来模拟递归栈来保存过程中的变量。

前序遍历

public List<Integer> preOrderTraverse(TreeNode root) {// 保存前序遍历结果List<Integer> result = new ArrayList<>();if(root == null) return result;// 模拟递归栈Stack<TreeNode> stack = new Stack<>();stack.push(root);while(!stack.isEmpty()) {TreeNode node = stack.pop();result.add(node.val);// 这里先判断右孩子,然后判断左孩子if(node.right != null) stack.push(node.right);if(node.left  != null) stack.push(node.left);}return result;
}

中序遍历

public List<Integer> inOrderTraverse(TreeNode root) {// 保存遍历结果List<Integer> result = new ArrayList<>();if(root == null) return result;// 模拟栈Stack<TreeNode> stack = new Stack<>();TreeNode node = root;while(node != null || !stack.isEmpty()) {while(node != null) {stack.push(node);node = node.left;}if(!stack.isEmpty()) {node = stack.pop();result.add(node.val);node = node.right;}}return result;
}

后序遍历

public List<Integer> postOrderTraverse(TreeNode root) {// 后序遍历的结果List<Integer> result = new ArrayList<>();if(root == null) return result;// 模拟栈Stack<TreeNode> stack = new Stack<>();stack.push(root);while(!stack.isEmpty()) {TreeNode node = stack.pop();// 这里其实是逆序的后序遍历结果,也就是先->右->左,遍历完成之后反转一下就是最终的结果result.add(node.val);// 先放 左 后放 右 ,后面取的时候就是 先取右 再取左if(node.left  != null) stack.push(node.left);if(node.right != null) stack.push(node.right);}Collections.reverse(result);return result;
}

前中后序遍历(非递归)
二叉树前中后序的非递归遍历

二叉树的前中后序遍历的非递归形式【Java】相关推荐

  1. 二叉树前中后序遍历的非递归实现以及层次遍历、zig-zag型遍历详解

    前言 二叉树的遍历是一个比较常见的问题,递归实现二叉树的前中后序遍历比较简单,但非递归实现二叉树的前中后序遍历相对有难度.这篇博客将详述如何使用非递归的方式实现二叉树的前中后序遍历,在进行理论描述的同 ...

  2. 二叉树的层序遍历和前中后序遍历代码 迭代/递归

    二叉树的层序遍历和前中后序遍历代码 迭代/递归 只记录代码.思路参考代码随想录:https://github.com/youngyangyang04/leetcode-master/blob/mast ...

  3. 二叉树的前,中,后序遍历(思路分析) [Java][数据结构]

    二叉树的前,中,后序遍历(思路分析) 前序遍历: 先输出父节点, 再遍历左子树和右子树 中序遍历: 先遍历左子树, 再输出父节点,再遍历右子树 后序遍历: 先遍历左子树,再遍历右子树,最后输出父节点 ...

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

    Java二叉树的前中后序遍历 1.前序遍历 1.1前序遍历概念 1.2前序遍历习题 2.中序遍历 2.1中序遍历概念 2.2中序遍历习题 3.后续遍历 3.1后序遍历概念 3.2后序遍历习题 大家好, ...

  5. 数据结构之二叉树的前中后序遍历以及层序遍历

    学习目标:读完这篇博客搞定二叉树的前中后序以及层序遍历 首先:你应该明白什么是二叉树,下面这幅图就是一个完全二叉树 其实所谓的二叉树就是一个节点有小于等于二个分支的树,可以没有分支,可以有1条分支,可 ...

  6. 数据结构与算法(java):树-二叉树(二叉查找树(BST)、线索化二叉树、哈夫曼树、平衡二叉树【AVL】、二叉树的前中后序遍历)

    二叉树 1.定义 二叉树 就是度不超过2的树(每个结点最多只有两个子结点).如图 2.特殊二叉树 满二叉树 当二叉树的每一个层的结点树都达到最大值,则这个二叉树就是满二叉树. 完全二叉树 叶结点只能出 ...

  7. 二叉树的前中后序遍历之迭代法(非统一风格迭代方式)

    文章目录 前言 一.前序遍历(迭代法) 二.中序遍历(迭代法) 三.后序遍历(迭代法) 总结 前言 「递归的实现就是:每一次递归调用都会把函数的局部变量.参数值和返回地址等压入调用栈中」,然后递归返回 ...

  8. 二叉树的前中后序遍历(考试常考)

    二叉树遍历的概念 二叉树的遍历是按某种规则对二叉树的每个节点均只被访问一次,根据根节点访问位置的不同分为三种:先序遍历(根左右).中序遍历(左根右).后序遍历(左右根).         由于树是通过 ...

  9. 【数据结构】二叉树的前中后序遍历

    二叉树的三种遍历 1. 创建一棵简单的二叉树 1.1 二叉树结构体实现 1.2 创造一个二叉树结点的函数 1.3 手动创造一棵二叉树 2.为什么要遍历? 3.最重要的知识:由二叉树引出的子问题分析 4 ...

  10. 二叉树的前中后序遍历之迭代法(统一风格迭代方式)

    一.前序遍历(迭代法)->右左中 前序遍历是中左右,每次先处理的是中间节点,那么先将根节点放入栈中,然后将右孩子加入栈,再加入左孩子. 为什么要先加入 右孩子,再加入左孩子呢?因为这样出栈的时候 ...

最新文章

  1. 子图同构算法——Ullmann算法(1)不包含refine procedure的简单穷举算法。
  2. [小米OJ] 4. 最长连续数列
  3. 手机端双击页面放大的问题
  4. Android应用开发(15)---字符串资源
  5. 百度前端技术学院-精选笔记-1 HTML学习笔记
  6. ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法
  7. 网易云音乐encseckey算法php,[PHP]网易云音乐params计算及直链提取
  8. python 绘图库_Python安装可视化绘图库,你真的会了吗?一文告诉你全部
  9. OpenPose 运行指令 (Version@1.7)
  10. 《Android进阶指北》进阶必备,今日送出8本
  11. 计算机课导入语,信息技术课的提问和导入技巧
  12. 聊聊职场 - 个人发展
  13. 在Myeclipse 中导入java web项目出现JRE System Library(unbound)和Server Library(unbound)解决方法
  14. 面试官:MySQL索引为什么要用B+树实现?
  15. 二进制位运算 左移与右移
  16. 哈巴狗可以分为哪几种?
  17. HikariCP连接池教程
  18. 解锁来逗微信编辑器隐藏功能
  19. 浅析计算机网络安全与防火墙技术,浅析计算机网络安全与防火墙技术
  20. 基于matlab的杨氏干涉模拟仿真

热门文章

  1. 【评价模型】熵权法和模糊评价模型
  2. IPV6:移动光猫吉比特GM228-S 桥接+IPV6教程
  3. 主流数据库优缺点以及性能分析
  4. 数据库防火墙数据库加密与脱敏数据泄露防护
  5. linux memtest错误但没死机,LINUX系统无故死机,系统日志报错如下,各位帮忙看看是因为什么...
  6. 记一次maven打包命令及指定pom文件
  7. GB2312汉字区位码、交换码和机内码转换方法(转)
  8. 最新Hadoop的面试题总结
  9. 嵩天《Python网络爬虫与信息提取》实例1:Requests库网络爬虫实战5个实例
  10. Leetcode(java)