二叉树算法之【中序遍历】

目录

LeetCode-94题


LeetCode-94题

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

java 复制代码
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        order(root, result);
        return result;
    }

    private void order(TreeNode root, List<Integer> mid) {
        //当前节点
        TreeNode curr = root;
        //借助栈
        LinkedList<TreeNode> stack = new LinkedList<>();
        //最近一次pop的元素
        TreeNode pop = null;
        while (curr != null || !stack.isEmpty()) {
            if (curr != null) {
                stack.push(curr);
                //待处理左节点
                curr = curr.left;
            } else {
                //栈不为空
                TreeNode peek = stack.peek();
                //右节点为空
                if (peek.right == null) {
                    mid.add(peek.val);
                    pop = stack.pop();
                }
                //右节点处理完
                else if (peek.right == pop) {
                    pop = stack.pop();
                }
                //处理右节点
                else {
                    mid.add(peek.val);
                    curr = peek.right;
                }
            }
        }
    }
}
相关推荐
XS0301063 分钟前
并发编程 六
java·后端
yaoxin5211239 分钟前
419. 现代 Java IO 最佳实践 - 写入文本文件
java·windows·python
雪宫街道14 分钟前
synchronized 锁的范围:对象锁、类锁与代码块锁
java·jvm·后端·面试
菜菜的顾清寒18 分钟前
力扣HOT100(42)链表-随机链表的复制
算法·leetcode·链表
x***r15124 分钟前
linux安装 jdk-8u291-linux-x64.tar.gz 详细步骤(解压配置环境变量)
java
lqqjuly25 分钟前
模型剪枝与稀疏化:理论、算法与可运行实现
人工智能·算法·剪枝
逻辑君42 分钟前
Foresight研究报告【20260011】
人工智能·线性代数·算法·矩阵
珊瑚里的鱼42 分钟前
【动态规划】不同路径Ⅱ
算法·动态规划
极光代码工作室1 小时前
基于SpringBoot的校园论坛系统
java·springboot·web开发·后端开发
XS0301061 小时前
Spring Bean 作用域 & 生命周期
java·后端·spring