把操作压入栈实现二叉树的前中后遍历

本文介绍了一种使用迭代而非递归的方法来实现二叉树的前序遍历。通过自定义的数据结构Guide和Deque,算法能够有效地跟踪节点的访问状态,避免了递归可能导致的栈溢出问题。

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

package offer_pro.caculate;

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;

/**
 * @Auther: 大哥的叔
 * @Date: 2019/8/16 15:25
 * @Description:
 */

 class Solution {
    public static void main (String[] args) {
        Solution s = new Solution();
            TreeNode root = new TreeNode(1);
            root.left = null;
            root.right = new TreeNode(2);
            root.right.left = new TreeNode(3);
      List<Integer> l = s.preorderTraversal(root);
        System.out.print("result----"+ l.toString());
    }
    public  List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();//存放结果
        Deque<Guide> path = new ArrayDeque<>();//用
        path.addFirst(new Guide(0, root));

        while (!path.isEmpty()) {
            Guide current = path.removeFirst();
            if (current.node == null) {
                continue;
            }
            if (current.opear == 1) {
                result.add(current.node.value);
            } else {
                path.addFirst(new Guide(0, current.node.right));
                path.addFirst(new Guide(0, current.node.left));
                path.addFirst(new Guide(1, current.node));
            }
        }
        return result;
    }


    private class Guide{
        int opear;//操作类型0访问,1打印
        TreeNode node;
        public Guide(int opear,TreeNode node){
            this.opear = opear;
            this.node = node;
        }
    }
}
class TreeNode {
      int value;
     TreeNode left;
      TreeNode right;
      TreeNode(int value) { this.value = value; }
  }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值