PostOrderTraverse

By | November 26, 2014
Share the joy
  •  
  •  
  •  
  •  
  •  
  •  
  1. public class PostOrderNonTraverse {
  2.     public static void main(String[] args){
  3.         Tree t17 = new Tree(17);
  4.         Tree t16 = new Tree(16);
  5.         Tree t15 = new Tree(15);
  6.         Tree t14 = new Tree(14);
  7.         Tree t13 = new Tree(13);
  8.         Tree t12 = new Tree(12);
  9.         Tree t11 = new Tree(11);
  10.         Tree t10 = new Tree(10);
  11.         Tree t9 = new Tree(9);
  12.         Tree t8 = new Tree(8);
  13.         Tree t7 = new Tree(7);
  14.         Tree t6 = new Tree(6);
  15.         Tree t5 = new Tree(5);
  16.         Tree t4 = new Tree(4);
  17.         Tree t3 = new Tree(3);
  18.         Tree t2 = new Tree(2);
  19.         Tree t1 = new Tree(1);
  20.         t8.left = t9;
  21.         t6.left = t8;
  22.         t5.right = t7;
  23.         t4.left = t5;
  24.         t4.right = t6;
  25.         t2.left = t4;
  26.         t1.left = t2;
  27.         t1.right = t3;
  28.         t6.right = t10;
  29.         t3.left = t11;
  30.         t3.right = t12;
  31.         t12.left = t13;
  32.         t12.right = t14;
  33.         t13.left = t15;
  34.         t13.right = t16;
  35.         PostTraverse(t1);
  36.     }
  37.     public static void PostTraverse(Tree tree){
  38.         ArrayList s = new ArrayList();
  39.         s.add(tree);
  40.         Tree prev = null;
  41.         Tree curr = null;
  42.         Tree next = null;
  43.         while(!s.isEmpty()){
  44.             curr = s.get(s.size()-1);
  45.             if(prev==null||prev.left==curr||prev.right==curr||(curr.left != prev)&&(curr.right != prev)){
  46.                 //新进来的
  47.                 if(curr.left==null&&curr.right==null){    //是叶子
  48.                     System.out.println(curr.value);
  49.                     s.remove(s.size()-1);
  50.                 }
  51.                 else{
  52.                     if(curr.right!=null){
  53.                         s.add(curr.right);
  54.                     }
  55.                     if(curr.left!=null){
  56.                         s.add(curr.left);
  57.                     }
  58.                 }
  59.             }
  60.             else if(curr.left == prev){    //从左子树返回的
  61.                 if(curr.right!=null){
  62.                     s.add(curr.right);
  63.                 }
  64.                 else{
  65.                     System.out.println(curr.value);
  66.                     s.remove(s.size()-1);
  67.                 }
  68.             }
  69.             else{    //从右子树返回
  70.                 System.out.println(curr.value);
  71.                 s.remove(s.size()-1);
  72.             }
  73.             prev = curr;
  74.         }
  75.     }
  76. }
  77. class Tree{
  78.     public Tree(int value){
  79.         this.value = value;
  80.     }
  81.     public Tree left;
  82.     public Tree right;
  83.     public int value;
  84. }