zoukankan      html  css  js  c++  java
  • 二叉树的非递归遍历

     // 先序遍历非递归     
        public static void preOrder2(BinTree t) {    
            Stack<BinTree> s = new Stack<BinTree>();    
            while (t != null || !s.empty()) {    
                while (t != null) {    
                    System.out.print(t.date);    
                    s.push(t);    
                    t = t.lchild;    
                }    
                if (!s.empty()) {    
                    t = s.pop();    
                    t = t.rchild;    
                }    
            }    
        }    
        
        // 中序遍历非递归     
        public static void InOrder2(BinTree t) {    
            Stack<BinTree> s = new Stack<BinTree>();    
            while (t != null || !s.empty()) {    
                while (t != null) {    
                    s.push(t);    
                    t = t.lchild;    
                }    
                if (!s.empty()) {    
                    t = s.pop();    
                    System.out.print(t.date);    
                    t = t.rchild;    
                }    
            }    
        }    
        
        // 后序遍历非递归     
        public static void PostOrder2(BinTree t) {    
            Stack<BinTree> s = new Stack<BinTree>();    
            Stack<Integer> s2 = new Stack<Integer>();    
            Integer i = new Integer(1);    
            while (t != null || !s.empty()) {    
                while (t != null) {    
                    s.push(t);    
                    s2.push(new Integer(0));    
                    t = t.lchild;    
                }    
                while (!s.empty() && s2.peek().equals(i)) {    
                    s2.pop();    
                    System.out.print(s.pop().date);    
                }    
        
                if (!s.empty()) {    
                    s2.pop();    
                    s2.push(new Integer(1));    
                    t = s.peek();    
                    t = t.rchild;    
                }    
            }    
        }    
        
     public void thePostOrderTraversal_Stack(Node root) {   //后序遍历  
            Stack<Node> stack = new Stack<Node>();  
            Stack<Node> output = new Stack<Node>();//构造一个中间栈来存储逆后序遍历的结果  
            Node node = root;  
            while (node != null || stack.size() > 0) {  
                if (node != null) {  
                    output.push(node);  
                    stack.push(node);                 
                    node = node.getRightNode();  
                } else {  
                    node = stack.pop();               
                    node = node.getLeftNode();
                }  
            }  
            System.out.println(output.size());
            while (output.size() > 0) {
                
                printNode(output.pop());  
            }  
        }
  • 相关阅读:
    HTML5表单元素的学习
    微博账号注册
    微博三方登陆流程
    Vue发送短信逻辑
    celery异步发送短信
    celery
    celery
    jwt安装配置与原理
    图片验证
    Vue组件
  • 原文地址:https://www.cnblogs.com/blythe/p/7486280.html
Copyright © 2011-2022 走看看