zoukankan      html  css  js  c++  java
  • 二叉树的前中后序遍历的递归与非递归算法模版

    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;
                    }
                }
    
            }
        }
    }
  • 相关阅读:
    Oracle导入导出命令
    深入理解JSP/Servlet Session会话管理机制
    Weblogic domain密码的重置方法
    RPC关键要点
    Ubuntu如何配置Telnet服务器
    Win7如何解决telnet不是内部或外部命令!
    Linux系统下的文件权限
    虚拟机系统ubuntu安装VMWare Tools
    SQL模糊查询 LIKE
    Ubuntu下安装SSH
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/12751275.html
Copyright © 2011-2022 走看看