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

题目:

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

解法一: 递归写法

思路: 先处理左子树 inOrder(root.left),在打印root的值,之后处理右子树。

复制代码
public static void inOrder(TreeNode root){
        if (root == null){
            return;
        }
        inOrder(root.left);
        System.out.print(root.val + " ");
        inOrder(root.right);
    }

解法二: 用栈改造中序递归

注意:二叉树的先,中,后序遍历都可以用栈来改造成非递归写法。

用栈改造中序递归的基本思路就是,一路向下查找节点的左孩子,如果有左孩子,入栈,这样的话,可以保证最后一个左孩子先出栈,如果某一节点左孩子为空,pop出上一个左孩子并处理,之后对右孩子也执行相同的操作。

复制代码
public List<Integer> inorderTraversal(TreeNode root) {
        if(root == null){
            return new ArrayList<Integer>();
        }
        List<Integer> res = new ArrayList<>();
        Stack<TreeNode> stack = new Stack<>();
        while(!stack.isEmpty() || root != null){
            if(root != null){
                stack.push(root);
                root = root.left;
            }else{
                root = stack.pop();
                res.add(root.val);
                root = root.right;
            }
        }
        return res;
    }

如果想看二叉树的全部递归与非递归代码,请点击:二叉树的递归与非递归遍历方式

相关推荐
新新学长搞科研2 分钟前
【高质量能源会议推荐】第十一届能源与环境研究进展国际学术会议(ICAEER 2026)
人工智能·物联网·算法·机器学习·能源·环境·新能源
逝水如流年轻往返染尘4 分钟前
JAVA中的String类
java
一只叫煤球的猫6 分钟前
ThreadForge 1.2.0 发布:让 Java 并发代码更好写,这次补齐了高阶编排、示例与观测能力
java·设计模式·设计
counting money12 分钟前
Spring框架基础(依赖注入-半注解形式)
java·后端·spring
CN-Dust13 分钟前
【C++】for循环例题专题
java·c++·算法
染夕陌木26 分钟前
RPC/服务调用框架中“方法无法应用到给定类型”错误的通用排查指南
java·ide·rpc
大大杰哥29 分钟前
String常用方法
java
楼兰公子35 分钟前
读取rpi摄像头
linux·服务器·算法
渡之37 分钟前
NaviLoc - GNSS 拒止环境下无人机空对地卫星视觉定位算法 论文整理
算法·无人机·飞控
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题】【Java基础篇】第20题:HashMap在计算index的时候,为什么要对数组长度做减1操作
java·开发语言·数据结构·后端·面试·哈希算法·hash-index