Y计划--实施four--二叉树的递归与非递归实现

本文详细介绍了二叉树的先序、中序和后序遍历的递归与非递归实现方式。通过递归函数展示了如何打印节点值,同时提供了返回节点值列表的改进版本。对于非递归实现,利用栈来模拟递归过程,分别实现了先序、中序和后序遍历。这些方法有助于理解二叉树的遍历原理,并为实际编程提供参考。
摘要由CSDN通过智能技术生成

二叉树的先中后的递归与非递归实现

递归
// 先序
public static void pro(Node head){
        if(head ==null){
            return;
        }
        System.out.println(head.val);
        pro(head.left);
        pro(head.right);
    }
    //    中序
    public static void into(Node head){
        if(head==null){
            return ;
        }
        into(head.left);
        System.out.println(head.val);
        into(head.right);
    }
    //    后序
    public static void last(Node head){
        if(head==null){
            return ;
        }
        last(head.left);
        last(head.right);
        System.out.println(head.val);
    }
    
递归改进版本-返回值的形式
// 先序
public static java.util.List<Integer> pro2(Node head){
        java.util.List<Integer> list = new java.util.ArrayList<>();
        process(head,list);
        return list;
    }
    public static void process(Node x,java.util.List<Integer> list){
        if (x==null){
            return;
        }
        list.add(x.val);
        process(x.left,list);
        process(x.right,list);
    }
    // 中序
     public static java.util.List into2( TreeNode root){
        java.util.List<Integer> list = new java.util.ArrayList<>();
        processInto(root,list);
        return list;
    }
    public static void processInto(TreeNode x, java.util.List<Integer> list){
        if(x == null){
            return;
        }
        processInto(x.left,list);
        list.add(x.val);
        processInto(x.right,list);

    }
    // 后序换汤不换药
非递归
// 先序
    public static java.util.List<Integer> pre3(TreeNode root){
        if(root==null){
            return new java.util.ArrayList<Integer>();
        }
        java.util.List<Integer> list = new java.util.ArrayList<>();
        java.util.Stack<TreeNode> stack = new java.util.Stack<>();
        stack.add(root);
        while (!stack.isEmpty()){
            root = stack.pop();
            list.add(root.val);
            if(root.right!=null){
                stack.add(root.right);
            }
            if(root.left!=null){
                stack.add(root.left);
            }
        }
        return list;
    }

//    中序
    public static java.util.List<Integer> into3(TreeNode root){
        if(root==null){
            return new java.util.ArrayList<Integer>();
        }
        java.util.List<Integer> list = new java.util.ArrayList<>();
        java.util.Stack<TreeNode> stack = new java.util.Stack<>();

        while (!stack.isEmpty()||root!=null){
            if(root!=null){
                stack.add(root);
                root = root.left;
            }else {
                root = stack.pop();
                list.add(root.val);
                root = root.right;
            }
        }
        return list;
    }
//    后序
    public static java.util.List<Integer> last(TreeNode root){
        if(root==null){
            return new java.util.ArrayList<Integer>();
        }
        java.util.List<Integer> list = new java.util.ArrayList<>();
        java.util.Stack<TreeNode> stack1 = new java.util.Stack<>();
        java.util.Stack<TreeNode> stack2 = new java.util.Stack<>();

        stack1.add(root);
        while (!stack1.isEmpty()) {
            root = stack1.pop();
            stack2.add(root);
            if (root.left != null) {
                stack1.add(root.left);
            }
            if (root.right != null) {
                stack1.add(root.right);
            }
        }
//        存储栈弹出
        while (!stack2.isEmpty()){
            list.add(stack2.pop().val);
        }
        return list;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值