题目:

给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]1\2/3输出: [1,3,2]

程序入口:

    public static void main(String[] args) {TreeNode treeNode = new TreeNode(1);treeNode.left = null;treeNode.right = new TreeNode(2);treeNode.right.left = new TreeNode(3);List<Integer> integers = preorderTraversal(treeNode);System.out.println(integers);}

解决方法1:入栈法

    public static List<Integer> inorderTraversal2(TreeNode root) {LinkedList<Integer> linkedList = new LinkedList<>();LinkedList<TreeNode> stack = new LinkedList<>();TreeNode mCur = root;while (mCur != null || !stack.isEmpty()) {while (mCur != null) {stack.offer(mCur);mCur = mCur.left;}TreeNode treeNode = stack.pollLast();linkedList.offer(treeNode.val);mCur = treeNode.right;}return linkedList;}

所有非空的左节点都入栈,到头之后出栈,然后遍历右边的孩子。

解决方法二:递归法

    public static List<Integer> inorderTraversal3(TreeNode root) {LinkedList<Integer> linkedList = new LinkedList<>();reverse(root,linkedList);return linkedList;}private static void reverse(TreeNode node,LinkedList<Integer> linkedList) {if (node != null) {//左节点reverse(node.left,linkedList);//自己linkedList.offer(node.val);//右节点reverse(node.right,linkedList);}}

二叉树,对于最简单的节点遍历也就是左孩子,自己,右孩子。我们调用根节点的这个方法。遍历左孩子的时候,左孩子又是一个根节点,遍历右孩子的时候,右孩子又是一个根节点。

解决方法3:

    public static List<Integer> inorderTraversal(TreeNode root) {LinkedList<Integer> linkedList = new LinkedList<>();LinkedList<TreeNode> stack = new LinkedList<>();stack.offer(root);while (!stack.isEmpty()) {TreeNode poll = stack.pollLast();if (poll == null) {continue;}if (poll.left == null && poll.right == null) {linkedList.offer(poll.val);continue;}TreeNode right = poll.right;if (right != null) {stack.offer(right);}if (poll.left != null) {stack.offer(poll);stack.offer(poll.left);}else {linkedList.offer(poll.val);continue;}poll.left = null;poll.right = null;}return linkedList;}

算法--------二叉树的中序遍历相关推荐

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

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

  2. 《LeetCode力扣练习》第94题 二叉树的中序遍历 Java

    <LeetCode力扣练习>第94题 二叉树的中序遍历 Java 一.资源 题目: 给定一个二叉树的根节点 root ,返回它的 中序 遍历. 示例 1: 输入:root = [1,nul ...

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

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

  4. leetcode - 94. 二叉树的中序遍历

    给定一个二叉树,返回它的中序遍历.中序遍历(LDR)是二叉树遍历的一种,也叫做中根遍历.中序周游.在二叉树中,中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树. 示例: 进阶: 递归算法很简单, ...

  5. LeetCode-94. 二叉树的中序遍历

    题目描述: 给定一个二叉树的根节点 root ,返回它的 中序 遍历. 输入:root = [1,null,2,3] 输出:[1,3,2] 思路分析: 用递归或是迭代算法来解决. 递归: 首先我们需要 ...

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

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

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

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

  8. 每日一题——二叉树的中序遍历

    菜鸡每日一题系列打卡94天 每天一道算法题目 小伙伴们一起留言打卡 坚持就是胜利,我们一起努力! 题目描述(引自LeetCode) 给定一个二叉树,返回它的中序遍历. 示例: 输入: [1,null, ...

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

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

最新文章

  1. java单循环 比较得分_java – 为什么两个单独的循环比一个快?
  2. “编程不规范,同事两行泪!”
  3. java 使用正则表达式过滤HTML中标签
  4. 完美解决小程序一维数组循环渲染列表不够用问题
  5. 细讲 | Attention Is All You Need
  6. eclipselink mysql_Eclipselink更新现有表
  7. wps 项目进度_如何用Excel做项目进度表
  8. 用spss进行数据的标准化处理_spss 如何进行数据标准化_spss原始数据标准化_spss数据标准化处理 如何使用SPSS做时间序列分析_spss时间序列分析...
  9. AD15实际工程的基本操作
  10. ZOJ 3805 树形dp
  11. 2020校园招聘公司列表!计算机/互联网 技术类岗位!,一直更新!
  12. 局域网文件共享服务器速度如何提升,分享提高XP访问局域网共享文件速度的方法...
  13. android 二级联动列表,仿eleme点餐页面
  14. 判断各类无盘软件是否处于超管状态
  15. 智慧树期末考试可以切换页面吗_智慧树考试可以切换界面吗?中途可以退出吗...
  16. VS2013 + opencv 配置及读取一张图片
  17. 如何彻底解决浏览器导航被劫持为www.hao123.com
  18. 通过不断重置学习率来逃离局部极值点
  19. project子项目之间任务关联_任务日历关联(Project)
  20. Java反编译工具Luyten介绍

热门文章

  1. python列表取出元素_python中的列表,添加元素,获取元素,删除元素,列表分片,常用操作符...
  2. python奇数和_请问python如何判断奇偶数?
  3. 电脑键盘数字键失灵_C4D/3dmax/MaYa三维设计——高档机械键盘推荐·红轴(200元左右预算)...
  4. linux sftp 中文,Linux(CentOS)上配置 SFTP服务器
  5. mysql命令行批量添加数据_mysql命令行批量插入100条数据命令
  6. pythonselenium实战 excel读取和写入_Python3.6+selenium2.53.6自动化测试_读取excel文件的方法...
  7. JAVA9模块化详解(一)——模块化的定义
  8. wordpress 常用函数-wpdb类
  9. java.io.IOException: Attempted read from closed stream. 异常,解决
  10. windows下使用Jenkins搭建CI持续集成平台(版本源码管理使用SVN)