二叉树遍历144、94、145

  • 前序遍历_迭代法
java 复制代码
public List<Integer> preorderTraversal(TreeNode root){
    List<Integer> result = new ArrayList<>();
    if(root == null) return result;
    Deque<TreeNode> stack = new ArrayDeque();
    stack.push(root);
    while(!stack.isEmpty()){
        TreeNode node = stack.pop();
        result.add(node.val);
        if(node.right != null) stack.push(node.right);
        if(node.left != null) stack.push(node.left);
    }
    return result;
}
  • 中序遍历_迭代法
  • 思路:
  1. 将cur一直到树的最左下位置的null,再开始向result加元素。
  2. 再依次从stack取元素给cur,用cur.val给res加元素。
  3. 再cur = cur.right;//这一句代码很妙
java 复制代码
public List<Integer> inorderTraversal(TreeNode root){
    List<Integer> result = new ArrayList<>();
    if(root == null) return reault;
    Deque<TreeNode> stack = new ArrayDeque<>();
    TreeNode cur = root;
    while(cur != null || !stack.isEmpty()){
        while(cur != null){
            stack.push(cur);
            cur = cur.left;
        }
        cur = stack.pop();
        reault.add(cur.val);
        cur = cur.right;
    }
}
  • 后序遍历_迭代法
java 复制代码
oublic List<Integer> postorderTraversal(TreeNode root){
    List<Integer> result = new ArrayList<>();
    if(root == null) return result;
    Deque<TreeNode> stack = new ArrayDeque<>();
    stack.push(root);
    Deque<Integer> outputStack = new ArrayDeque<>();
    while(!stack.isEmpty()){
        TreeNode node = stack.pop();
        outputStack.push(node.val);
        // 这个左右顺寻保持和result(左-右)一样
        if(node.left != null) stack.push(node.left);
        if(node.right != null) stack.push(node.right);
    }
    while(!outputStack.isEmpty()){
        result.add(outputStack.pop());
    }
    return result;
}

总结:前序、后序的前四行代码完全一样,后序多定义了一个outputStack

相关推荐
西西弗Sisyphus13 分钟前
理解 Linux 动态库加载:LD_LIBRARY_PATH
linux
AR-26710-14 分钟前
Linux Day31——实操启停服务改端口重启
linux·运维
百度Geek说1 小时前
QCon上海2026:百度 SRE Agent 规模化落地实践解读
运维·自动化运维
叼烟扛炮1 小时前
Linux 学习笔记(五十八):IO 多路复用封神——epoll 底层原理揭秘
linux·运维·服务器·网络·笔记·学习·php
叼烟扛炮1 小时前
Linux 学习笔记(五十一):数据链路层与 ARP 协议——局域网寻址与黑客骗局
linux·网络·网络协议·php·tcpdump
星恒随风2 小时前
Linux网络编程:彻底理解IO多路复用select!从fd_set位图、读写就绪到手写TCP多客户端字典服务器
linux·服务器·网络
陈布衣2 小时前
MySQL(1)_MySQL 5.7.21 Linux 安装笔记
linux·笔记·mysql
分布式存储与RustFS4 小时前
给 RustFS 桶加一层内存缓存:用 Alluxio 让热数据少跑一遍网络
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
Oiiouui4 小时前
linux服务器部署Logto后端与对应前端的实现
linux·服务器·前端·后端