Leetcode JAVA刷刷站(94)二叉树的中序遍历

一、题目概述

二、思路方向

在Java中,中序遍历二叉树通常使用递归或迭代(使用栈)的方法来实现。这里我将提供两种方法的示例代码。

方法一:递归

递归方法相对直观,中序遍历的顺序是:先遍历左子树,然后访问根节点,最后遍历右子树。

java 复制代码
class TreeNode {  
    int val;  
    TreeNode left;  
    TreeNode right;  
    TreeNode(int x) { val = x; }  
}  
  
public class Solution {  
    public List<Integer> inorderTraversal(TreeNode root) {  
        List<Integer> result = new ArrayList<>();  
        inorderHelper(root, result);  
        return result;  
    }  
  
    private void inorderHelper(TreeNode node, List<Integer> result) {  
        if (node == null) {  
            return;  
        }  
        inorderHelper(node.left, result);  
        result.add(node.val);  
        inorderHelper(node.right, result);  
    }  
}

方法二:迭代(使用栈)

迭代方法需要手动维护一个栈来模拟递归过程。

java 复制代码
import java.util.*;  
  
class TreeNode {  
    int val;  
    TreeNode left;  
    TreeNode right;  
    TreeNode(int x) { val = x; }  
}  
  
public class Solution {  
    public List<Integer> inorderTraversal(TreeNode root) {  
        List<Integer> result = new ArrayList<>();  
        Stack<TreeNode> stack = new Stack<>();  
        TreeNode curr = root;  
  
        while (curr != null || !stack.isEmpty()) {  
            // 遍历到最左节点  
            while (curr != null) {  
                stack.push(curr);  
                curr = curr.left;  
            }  
            // 弹出栈顶元素并访问  
            curr = stack.pop();  
            result.add(curr.val);  
            // 转向右子树  
            curr = curr.right;  
        }  
  
        return result;  
    }  
}

执行结果:

三、小结

两种方法各有优缺点。递归方法代码简洁,但在树非常深时可能会遇到栈溢出的问题。迭代方法虽然代码稍长,但避免了递归可能带来的栈溢出问题,且在某些情况下可能更高效(如树非常不平衡时)。你可以根据具体的应用场景和需求选择适合的方法。

结语

你做得已经很好了

别对自己太苛刻

!!!

相关推荐
喵叔哟10 分钟前
重构代码中引入外部方法和引入本地扩展的区别
java·开发语言·重构
尘浮生16 分钟前
Java项目实战II基于微信小程序的电影院买票选座系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
不是二师兄的八戒39 分钟前
本地 PHP 和 Java 开发环境 Docker 化与配置开机自启
java·docker·php
爱编程的小生1 小时前
Easyexcel(2-文件读取)
java·excel
带多刺的玫瑰1 小时前
Leecode刷题C语言之统计不是特殊数字的数字数量
java·c语言·算法
爱敲代码的憨仔1 小时前
《线性代数的本质》
线性代数·算法·决策树
yigan_Eins1 小时前
【数论】莫比乌斯函数及其反演
c++·经验分享·算法
阿史大杯茶2 小时前
AtCoder Beginner Contest 381(ABCDEF 题)视频讲解
数据结构·c++·算法
计算机毕设指导62 小时前
基于 SpringBoot 的作业管理系统【附源码】
java·vue.js·spring boot·后端·mysql·spring·intellij-idea
Gu Gu Study2 小时前
枚举与lambda表达式,枚举实现单例模式为什么是安全的,lambda表达式与函数式接口的小九九~
java·开发语言