zoukankan      html  css  js  c++  java
  • 递归与非递归实现树的遍历(java)

    package test;
    import java.util.Stack;
    public class Sort {
        public static void main(String[] args) {
            Node root9=new Node(9,null,null);
            Node root8=new Node(8,null,null);
            Node root7=new Node(7,null,null);
            Node root6=new Node(6,null,null);
            Node root5=new Node(5,null,null);
            Node root4=new Node(4,root8,root9);
            Node root3=new Node(3,root6,root7);
            Node root2=new Node(2,root4,root5);
            Node root1=new Node(1,root2,root3);
            System.out.println("pre...");
            preOrderTraverse(root1);
            System.out.println();
            preOrderTraverseNoRecursion(root1);
            System.out.println();
            System.out.println("in...");
            inOrderTraverse(root1);
            System.out.println();
            inOrderTraverseNoRecursion(root1);
            System.out.println();
            System.out.println("post...");
            postOrderTraverse(root1);
            System.out.println();
            postOrderTraverseNoRecursion(root1);
            System.out.println();
    
    
        }
        static class Node{
            public Node(Integer data,Node left,Node right) {
                this.data=data;
                this.left=left;
                this.right=right;
            }
            public Node() {
                super();
            }
            Integer data;
            Node left;
            Node right;
        }
        static void preOrderTraverse(Node root){
            if(root!=null){
                System.out.print(root.data+" ");
                preOrderTraverse(root.left);
                preOrderTraverse(root.right);
            }
        }
        static void preOrderTraverseNoRecursion(Node root){
            Stack<Node> s=new Stack<Node>();
            Stack<Node> s1=new Stack<Node>();
            Node p,p1;
            s.push(root);
            while(!s.isEmpty()){
                while((p=s.lastElement())!=null){
                    System.out.print(p.data+" ");
                    s.push(p.left);
                }
                s.pop();
                if(!s.isEmpty()){
                    p=s.pop();
                    s.push(p.right);
                }
            }
        }
        static void inOrderTraverse(Node root){
            if(root!=null){
                inOrderTraverse(root.left);
                System.out.print(root.data+" ");
                inOrderTraverse(root.right);
            }
        }
        static void inOrderTraverseNoRecursion(Node root){
            Stack<Node> s=new Stack<Node>();
            Stack<Node> s1=new Stack<Node>();
            Node p,p1;
            s.push(root);
            while(!s.isEmpty()){
                while((p=s.lastElement())!=null){
                    s.push(p.left);
                }
                s.pop();
                if(!s.isEmpty()){
                    p=s.pop();
                    System.out.print(p.data+" ");
                    s.push(p.right);
                }
            }
        }
        static void postOrderTraverse(Node root){
            if(root!=null){
                postOrderTraverse(root.left);
                postOrderTraverse(root.right);
                System.out.print(root.data+" ");
            }
        }
    
        static void postOrderTraverseNoRecursion(Node root){
            Stack<Node> s=new Stack<Node>();
            Stack<Node> s1=new Stack<Node>();
            Node p,p1;
            s.push(root);
            while(!s.isEmpty()){
                while((p=s.lastElement())!=null){
                    s.push(p.left);
                }
                s.pop();
                while(!s1.isEmpty()&&s1.lastElement()==s.lastElement()){
                    s.pop();
                    p1=s1.pop();
                    System.out.print(p1.data+" ");
                }
                if(!s.isEmpty()){
                    p=s.lastElement();
                    s1.push(p);
                    s.push(p.right);
                }
            }
        }
    }
  • 相关阅读:
    mongodb分布式查询
    MongoDB JAVA API Filters
    mongodb.conf配置文件详解
    mongodb安装配置
    Elasticsearch-2.3.x填坑之路
    C++对象模型详解
    关于虚函数的那些事儿
    关于B树的一些总结
    动态规划问题
    C中的qsort函数和C++中的sort函数的理解与使用
  • 原文地址:https://www.cnblogs.com/wjc920/p/9256180.html
Copyright © 2011-2022 走看看