Tree Traversal (preOrder, inOrder, postOrder, levelOrder, zigzagOrder)

  1 class TreeNode{

  2     char data;

  3     TreeNode left;

  4     TreeNode right;

  5     static int leaf;

  6     static boolean flag=true;

  7     TreeNode (char c){

  8         data = c;

  9     }

 10     TreeNode (TreeNode n){

 11         data = n.data;

 12         left = n.left;

 13         right = n.right;

 14     }

 15     

 16     public static void visit(TreeNode n){

 17         if(n == null)

 18             System.out.print("");

 19         else{

 20             if(flag){

 21                 System.out.print(n.data);

 22                 flag = false;

 23             }else{

 24                 System.out.print(" " + n.data);

 25             }

 26         }

 27         if(n.left == null && n.right == null) {

 28             leaf++;

 29         }

 30     }

 31     

 32     public static void preOrder(TreeNode root){

 33         if(root == null) return;

 34         visit(root);

 35         preOrder(root.left);

 36         preOrder(root.right);

 37     }

 38     

 39 //    public static void preOrder2(TreeNode root){

 40 //        if(root == null) return;

 41 //        Stack<TreeNode> stack = new Stack<TreeNode>();

 42 //        stack.add(root);

 43 //        while(!stack.isEmpty()){

 44 //            TreeNode top = stack.pop();

 45 //            visit(top);

 46 //            if(top.right != null) stack.add(top.right);

 47 //            if(top.left != null) stack.add(top.left);

 48 //        }

 49 //    }

 50     

 51     public static void preOrder2(TreeNode root){

 52         if(root == null) return;

 53         Stack<TreeNode> stack = new Stack<TreeNode>();

 54         while(!stack.isEmpty() || root != null){

 55             if(root != null){

 56                 stack.push(root);

 57                 visit(root);

 58                 root = root.left;

 59             }else{

 60                 root = stack.pop();

 61                 root = root.right;

 62             }    

 63         }

 64     }

 65     public static void inOrder(TreeNode root){

 66         if(root == null) return;

 67         inOrder(root.left);

 68         visit(root);

 69         inOrder(root.right);

 70     }

 71     

 72     public static void inOrder2(TreeNode root){

 73         if(root == null) return;

 74         Stack<TreeNode> stack = new Stack<TreeNode>();

 75         while(!stack.empty() || root != null){

 76             if(root != null){

 77                 stack.push(root);

 78                 root = root.left;

 79             }else{

 80                 //reached leftMost

 81                 root = stack.pop();

 82                 visit(root);

 83                 root = root.right;

 84             }

 85         }

 86     }

 87     

 88     public static void postOrder(TreeNode root){

 89         if(root == null) return;

 90         postOrder(root.left);

 91         postOrder(root.right);

 92         visit(root);

 93     }

 94     

 95     public static void levelOrder(TreeNode root){

 96         if(root == null) return;

 97         LinkedList<TreeNode> q = new LinkedList<TreeNode>();

 98         q.add(root);

 99         while(!q.isEmpty()){

100             TreeNode head = q.removeFirst();

101             visit(head);

102             if(head.left != null) q.add(head.left);

103             if(head.right != null) q.add(head.right);

104         }

105     }

106     

107     public static void zigzagOrder(TreeNode root){

108         LinkedList<TreeNode> currentLevel = new LinkedList<TreeNode>();

109         int level = 0;

110         if(root != null) 

111             currentLevel.add(root);

112         while(!currentLevel.isEmpty()){

113             LinkedList<TreeNode> nextLevel = new LinkedList<TreeNode>();

114             ArrayList<TreeNode> list = new ArrayList<TreeNode>();

115             for(TreeNode node : currentLevel){

116                 list.add(node);

117                 if(node.left != null)

118                     nextLevel.add(node.left);

119                 if(node.right != null)

120                     nextLevel.add(node.right);

121             }

122             if(level%2 == 1)

123                 Collections.reverse(list);

124             for(int i = 0; i < list.size(); i++)

125                 visit(list.get(i));

126             currentLevel = nextLevel;

127             level++;

128         }

129         

130     }

131     

132 }

 

你可能感兴趣的:(order)