二叉树前序、中序、后序遍历非迭代解法

本文详细讲解如何使用迭代方法手写二叉树的前序、中序和后序遍历,通过栈来替代递归,帮助面试者掌握非递归解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉树前序、中序、后序遍历非迭代解法

经常会有面试官,让你手撕二叉树的前序、中序、后序遍历,当你简单得写了递归的方法,

面试官看了看,慢悠悠得抛出你会迭代的解法吗?,这时候就需要阅读我这篇文章了。

前序和中序遍历,解决方法类似,都是使用栈解决的。后序遍历稍微复杂一点。

二叉树前序遍历
class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<Integer>();
        TreeNode p = root;
        Stack<TreeNode> stack = new Stack<>();
        while(p != null || !stack.empty()) {
            while(p != null) {
                stack.push(p); list.add(p.val);
                p = p.left;
            }
            p = stack.pop();
            p = p.right;
        }
        return list;
    }
}
二叉树中序遍历
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        Stack<TreeNode> stack = new Stack<>();
        TreeNode p = root;
        List<Integer> list = new ArrayList<Integer>();

        while(p != null || !stack.empty()) {
            while(p != null) {
                stack.push(p); p = p.left;
            }

            p = stack.pop(); list.add(p.val);
            p = p.right;
        }
        return list;
    }
}
二叉树后序遍历
class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        ArrayList<Integer> list = new ArrayList<>();
        Stack<TreeNode> stack = new Stack<>();
        if(root != null) stack.push(root);
        while(!stack.empty()) {
            TreeNode value = stack.pop();
            list.add(value.val);
            if(value.left != null) stack.push(value.left);
            if(value.right != null) stack.push(value.right);
        }
        ArrayList<Integer> result = new ArrayList<>();
        for(int i = list.size()-1; i >= 0; i--) result.add(list.get(i));
        return result;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值