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

执行结果:

三、小结

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

结语

你做得已经很好了

别对自己太苛刻

!!!

相关推荐
2501_941882481 小时前
从灰度发布到流量切分的互联网工程语法控制与多语言实现实践思路随笔分享
java·开发语言
華勳全栈2 小时前
两天开发完成智能体平台
java·spring·go
alonewolf_992 小时前
Spring MVC重点功能底层源码深度解析
java·spring·mvc
地平线开发者2 小时前
征程 6 | cgroup sample
算法·自动驾驶
沛沛老爹2 小时前
Java泛型擦除:原理、实践与应对策略
java·开发语言·人工智能·企业开发·发展趋势·技术原理
专注_每天进步一点点2 小时前
【java开发】写接口文档的札记
java·开发语言
代码方舟2 小时前
Java企业级实战:对接天远名下车辆数量查询API构建自动化风控中台
java·大数据·开发语言·自动化
zgl_200537792 小时前
ZGLanguage 解析SQL数据血缘 之 标识提取SQL语句中的目标表
java·大数据·数据库·数据仓库·hadoop·sql·源代码管理
liwulin05062 小时前
【JAVA】创建一个不需要依赖的websocket服务器接收音频文件
java·服务器·websocket