后序遍历-双栈狂舞

 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());  
        }  
    }
       //非递归后序遍历
                public void NpostOrder(Node node){
                    Stack<Node> s1=new Stack<Node>();//第一次入栈
                    Stack<Node> s2=new Stack<Node>();//第二次入栈
                    Node n=node;
                while(!s1.isEmpty()||n!=null){
                    if(n!=null){
                        s1.push(n);
                        s2.push(n);
                        n=n.rightNode;
                    }
                    else{
                        n=s1.pop();
                        n=n.leftNode;
                    }
                }
                while(!s2.isEmpty()){
                    System.out.println("((("+s2.pop().getKey());
                }

                }
原文地址:https://www.cnblogs.com/cs-lcy/p/7202882.html