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);
                }
            }
        }
    }
  • 相关阅读:
    MYSQL 神奇的操作insert into test select * from test;
    mysql排序字段为空的排在最后面
    Redis有效时间设置及时间过期处理
    Dom4j 使用简介
    ASP.NET中使用多个runat=server form(转)
    谨以此文献给才毕业25年的朋友(转)
    门户网站
    庄思浩和BEA公司
    是什么限制了我们面向对象(的开发) (转)
    模态窗口和非模态窗口
  • 原文地址:https://www.cnblogs.com/wjc920/p/9256180.html
Copyright © 2011-2022 走看看