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;  
    }  
}

执行结果:

三、小结

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

结语

你做得已经很好了

别对自己太苛刻

!!!

相关推荐
王老师青少年编程3 小时前
gesp(C++五级)(14)洛谷:B4071:[GESP202412 五级] 武器强化
开发语言·c++·算法·gesp·csp·信奥赛
DogDaoDao3 小时前
leetcode 面试经典 150 题:有效的括号
c++·算法·leetcode·面试··stack·有效的括号
空の鱼4 小时前
java开发,IDEA转战VSCODE配置(mac)
java·vscode
Coovally AI模型快速验证4 小时前
MMYOLO:打破单一模式限制,多模态目标检测的革命性突破!
人工智能·算法·yolo·目标检测·机器学习·计算机视觉·目标跟踪
P7进阶路5 小时前
Tomcat异常日志中文乱码怎么解决
java·tomcat·firefox
可为测控5 小时前
图像处理基础(4):高斯滤波器详解
人工智能·算法·计算机视觉
Milk夜雨5 小时前
头歌实训作业 算法设计与分析-贪心算法(第3关:活动安排问题)
算法·贪心算法
小丁爱养花5 小时前
Spring MVC:HTTP 请求的参数传递2.0
java·后端·spring
CodeClimb5 小时前
【华为OD-E卷 - 第k个排列 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
等一场春雨5 小时前
Java设计模式 九 桥接模式 (Bridge Pattern)
java·设计模式·桥接模式