• 二叉树的前中后序遍历的递归与非递归算法模版


    1.节点数据结构

    public class Node {
    
        public int value;
        public Node left;
        public Node right;
    
        public Node(int data){
            this.value = value;
        }
    }

    2.递归

    public class Recur {
    
        public void preOrderRecur(Node head){
            if (head == null){
                return;
            }
    
            System.out.println(head.value + " ");
            preOrderRecur(head.left);
            preOrderRecur(head.right);
        }
    
        public void inOrderRecur(Node head){
            if (head == null){
                return;
            }
    
            inOrderRecur(head.left);
            System.out.println(head.value + " ");
            inOrderRecur(head.right);
        }
    
        public void posOrderRecur(Node head){
            if (head == null){
                return;
            }
    
            posOrderRecur(head.left);
            posOrderRecur(head.right);
            System.out.println(head.value + " ");
        }
    }

    3.非递归

    import java.util.Stack;
    
    public class UnRecur {
    
        public void preOrderUnRecur(Node head) {
            System.out.println("pre-order: ");
            if (head != null) {
                Stack<Node> stack = new Stack<>();
                stack.add(head);
                while (!stack.isEmpty()) {
                    head = stack.pop();
                    System.out.println(head.value + " ");
                    if (head.right != null) {
                        stack.push(head.right);
                    }
                    if (head.left != null) {
                        stack.push(head.left);
                    }
                }
            }
        }
    
        public void inOrderUnRecur(Node head) {
            System.out.println("in-order: ");
            if (head != null) {
                Stack<Node> stack = new Stack<>();
                while (!stack.isEmpty() || head != null) {
                    if (head != null) {
                        stack.push(head);
                        head = head.left;
                    } else {
                        head = stack.pop();
                        System.out.println(head.value + " ");
                        head = head.right;
                    }
                }
            }
        }
    
        public void posOrderUnRecur(Node head) {
            System.out.println("pos-order: ");
            if (head != null) {
                Stack<Node> stack = new Stack<>();
                stack.push(head);
                Node c;
                while (!stack.isEmpty()) {
                    c = stack.peek();
                    if (c.left != null && head != c.left && head != c.right) {
                        stack.push(c.left);
                    } else if (c.right != null && head != c.right) {
                        stack.push(c.right);
                    } else {
                        System.out.println(stack.pop().value + " ");
                        head = c;
                    }
                }
    
            }
        }
    }
  • 相关阅读:
    深入理解vue路由的使用
    mac异常删除管理员账户恢复操作
    springMVC前后端分离开发模式下支持跨域请求
    npm 更新镜像安装Appium
    npm升级所有可更新包
    new AppiumDriver<>(new URL(url), capabilities) 报错 java.lang.NoSuchMethodError: com.google.common.base.Throwables.throwIfUnchecked(Ljava/lang/Throwable;)V
    Jmeter命令行运行实例讲解
    shodan会员命令版
    AS-REPRoasting
    Password Spraying/密码喷洒
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/12751275.html
Copyright © 2020-2023  润新知