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()); } }