非递归实现二叉树先序,中序和后序遍历(详解)

本文详细介绍了如何使用非递归方式实现二叉树的前序、中序和后序遍历。前序遍历顺序为根、左、右,中序遍历顺序为左、根、右,后序遍历顺序为左、右、根。非递归实现利用栈的特性,通过调整访问顺序,实现了对二叉树的遍历。

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

非递归遍历的实现需要借助“栈”后进先出的特性来保存节点的顺序,前序、中序、后序是相对于根节点而言,根据根节点输出的位置,根、左、右为前序遍历;左、根、右为中序遍历;左、右、根为后序遍历。

1) 前序遍历(PreOrder):

1.先根节点设为当前节点进行访问
2.将当前节点入栈,并将其写入list,循环将左节点入栈,直到左节点为空,
3.访问栈顶元素,如果栈顶元素存在右孩子,将右孩子设为当前节点,继续第二步,
4.重复第2,3步,直到栈和当前节点都为空

对每个结点,都是先遍历其本身,再遍历左子树,所以当从栈中取出该结点的时候,可以确保其本身和左子树已经被访问过了,只需要访其右结点即可。

    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        Deque<TreeNode> stack = new ArrayDeque<>();
        TreeNode node = root;
        while(node != null || !stack.isEmpty()) {
            if(node != null) {
                stack.push(node);
                list.add(node.val);
                node = node.left;
            }else {
                node = stack.pop();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值