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());  
            }  
        }
  • 相关阅读:
    react中的生命周期钩子
    vue小知识
    vue发布中的前后端分离和前后端不分离
    vue中的vuex
    vue项目的发布
    stylus解决移动端1像素
    一行代码实现数组去重(ES6)
    详解js中Number()、parseInt()和parseFloat()的区别_javascript技巧
    关于element-ui 的日期时间选择器的超出时间无法选择的设置
    git使用
  • 原文地址:https://www.cnblogs.com/blythe/p/7486280.html
Copyright © 2011-2022 走看看