难易程度:★★

重要性:★★★★★

树结构是面试中的考察的重点,而树的遍历又是树结构的基础。中序遍历的非递归版本要求重点理解掌握。

/*** 非递归版本的中序遍历* node指向待处理的节点,在中序遍历中如果要输出一个节点,要么该节点没有左孩子,要么该节点的左子树已经全部输出了。*所以:*1.当node为null时,表示暂时没有新节点处理,此时出栈一个节点(表明该节点没有左子树或者左子树全部处理了);*    这时只需要继续处理右子树即可, 中序是“左根右”:我们先入栈 根节点 ,如果有左节点则入栈左节点,*    否则出栈根节点(没有左节点则输出遍历根节点),之后处理右子树*2.当node不为null时,将node入栈,并将node指向node.left,表明要处理当前节点必须先处理左子树节点* * @param root:根节点*/public static List<Integer> midOrderTraverse(TreeNode root) {LinkedList<Integer> res = new LinkedList<Integer>();if (root == null)return res;Stack<TreeNode> aux = new Stack<TreeNode>();TreeNode node = root;//node指向待处理节点while (node != null || !aux.isEmpty()) {while (node != null) {//当前节点不为null,将当前节点入栈等到该节点的左子树全部处理完后在处理当前节点aux.add(node);node = node.left;//先处理左孩子节点}TreeNode temp = aux.pop();res.add(temp.val);//node没有左孩子,则输出当前node节点node = temp.right;//处理node的右子树}return res;}/*** 中序遍历,递归版本* @param root* @return*/public static ArrayList<Integer> midOrderTraverse(TreeNode root) {ArrayList<Integer> res = new ArrayList<Integer>();midOrderTraverse(root, res);return res;}private static void midOrderTraverse(TreeNode root, ArrayList<Integer> res) {if (root == null)return;preOrder(root.left);res.add(root.val);preOrder(root.right);}
复制代码

扫描下方二维码,及时获取更多互联网求职面经javapython爬虫大数据等技术,和海量资料分享:公众号**菜鸟名企梦后台回复“csdn”即可免费领取【csdn】和【百度文库】下载服务;公众号菜鸟名企梦后台回复“资料”:即可领取5T精品学习资料**、java面试考点java面经总结,以及几十个java、大数据项目资料很全,你想找的几乎都有

转载于:https://juejin.im/post/5cbd75e4f265da03a22f6421

二叉树的中序遍历(递归和非递归版本)相关推荐

  1. 【数据结构笔记10】二叉树的先序、中序、后序遍历,中序遍历的堆栈/非递归遍历算法,层序遍历,确定一个二叉树,树的同构

    本次笔记内容: 3.3.1 先序中序后序遍历 3.3.2 中序非递归遍历 3.3.3 层序遍历 3.3.4 遍历应用例子 小白专场:题意理解及二叉树表示 小白专场:程序框架.建树及同构判别 文章目录 ...

  2. 二叉树的中序遍历 递归与非递归

    94. 二叉树的中序遍历 给定一个二叉树的根节点 root ,返回它的 中序 遍历. 示例 1: 输入:root = [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root = [ ...

  3. 编写非递归算法实现二叉树的中序遍历

    题目要求:编写非递归算法实现二叉树的中序遍历. 遍历代码: void InOrderTraverseNR(BiTree T) {SqStack stack;InitStack(&stack); ...

  4. 二叉树的中序遍历非递归方法(算法导论第三版12.1-3)

    二叉树的中序遍历非递归方法(算法导论第三版12.1-3) 1⃣️用栈实现 template<typename T> void inorder_tree_walk_non_recursion ...

  5. 二叉树的中序遍历 [递归 迭代]

    中序遍历的递归 & 迭代 前言 一.二叉树的中序遍历 二.递归 & 迭代 1.递归版 2.迭代(断左子树版) 3.迭代(root迭代版) 4.mirror(O(1)空间版) 总结 参考 ...

  6. 二叉树遍历之中序遍历算法(非递归、递归)入门详解

    一.引言 二叉树的遍历常见的方法有先序遍历.中序遍历.后序遍历和层次遍历等,本文给出了C语言版本的中序遍历二叉树的非递归算法和递归算法. 中序遍历的原理很简单,也就是把树根的访问放在中间.访问结点的次 ...

  7. LeetCode 92反转链表Ⅱ93复制ip地址94二叉树的中序遍历

    微信搜一搜:bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打卡群,欢迎 ...

  8. lintcode:二叉树的中序遍历

    题目: 二叉树的中序遍历 给出一棵二叉树,返回其中序遍历 样例 给出二叉树 {1,#,2,3}, 1\2/3 返回 [1,3,2]. 挑战 你能使用非递归算法来实现么? 解题: 程序直接来源 Java ...

  9. Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历

    Top1:Leetcode 129求根节点到叶节点数字之和 官方题解:https://leetcode.cn/problems/sum-root-to-leaf-numbers/solution/qi ...

  10. 15 二叉树的中序遍历(Binary Tree Inorder Traversal)

    文章目录 1 题目 2 描述 3 解决方案 3.1 递归算法 3.1.1 遍历法(Traverse) 思路 源码 3.1.2 分治法(Devide And Conquer) 思路 源码 3.2 非递归 ...

最新文章

  1. 记录:C#编程中的字符串
  2. java 蓝桥杯历届试题 分糖果(题解)
  3. JVM GC(垃圾回收机制)
  4. 计算机系统-Unicode字符集与它包含的UTF-8解决方案
  5. 中国数字墨水行业市场供需与战略研究报告
  6. jmeter录制脚本_jmeter(二)Badboy录制脚本
  7. 网络安全篇 全局ACL与URPF-12
  8. php的aes加密解密算法,PHP实现的简单AES加密解密算法实例
  9. concat函数_《MySQL 入门教程》第15篇MySQL常用函数之字符函数
  10. 《长安十二时辰》,作为程序员,看完我震惊了!涉及通信、云计算、大数据等!...
  11. 【win11】win10 资源管理器
  12. FineReport的数据决策系统注册
  13. ArduPilot飞行前检查——PreArm解析
  14. 4.4 区块链和大数据
  15. 从CSDN博客到出书,我的新书《SQL编程思想》是这样诞生的
  16. python idle快捷键
  17. 企业级刀片式服务器和盘柜的能效比较
  18. 【计算机网络】第七章:[网络层]网络协议(Part1.网络层首部)
  19. java随堂练习02,求一个0~255范围内的整数的十六进制值,例如60的十六进制表示形式3C
  20. Ubuntu 更换软件源

热门文章

  1. eclipse/myeclipse 中,如何删除已经下载过的插件(举例:删除scala ide)
  2. 重新定位svn地址的方法(windows和linux),svn switch(sw)的帮助信息
  3. MySQL · 捉虫动态 · 并行复制外键约束问题二
  4. bboss hadoop hdfs大数据抽取工具
  5. 【编程题目】编程判断俩个链表是否相交 ☆
  6. 维护人员的VMware日常工作
  7. NSIS安装制作基础教程
  8. Webpack 4 学习09(打包生成html)
  9. JS Array.reduce 实现 Array.map 和 Array.filter
  10. 【POJ 2482】 Stars in Your Window(线段树+离散化+扫描线)