二叉树遍历

97 阅读1分钟
public class Test {

   private static void preOrder1(Node root) {
       if(root == null) return;
       System.out.print(root.value);
       preOrder1(root.left);
       preOrder1(root.right);
   }

   private static void preOrder2(Node root) {
       Stack<Node> stack = new Stack<>();
       stack.push(root);

       while(!stack.isEmpty()) {
           Node node = stack.pop();
           System.out.print(node.value);
           if(node.right != null) stack.push(node.right);
           if(node.left != null) stack.push(node.left);
       }
   }

   private static void midOrder1(Node root) {
       if(root == null) return;
       midOrder1(root.left);
       System.out.print(root.value);
       midOrder1(root.right);
   }

   private static void midOrder2(Node root) {
       if(root == null) return;

       Stack<Node> stack = new Stack<>();
       Node cur = root;

       while(!stack.isEmpty() || cur != null) {
           while(cur != null) {
               stack.push(cur);
               cur = cur.left;
           }
           Node node = stack.pop();
           System.out.print(node.value);

           if(node.right != null) cur = node.right;
       }
   }

   private static void postOrder1(Node root) {
       if(root == null) return;
       postOrder1(root.left);
       postOrder1(root.right);
       System.out.print(root.value);
   }

   private static void postOrder2(Node root) {
       if(root == null) return;
       Stack<Node> stack = new Stack<>();
       Stack<Node> stack2 = new Stack<>();
       stack.push(root);

       while(!stack.isEmpty()) {
           Node node = stack.pop();
           stack2.push(node);
           if(node.left != null) stack.push(node.left);
           if(node.right != null) stack.push(node.right);
       }
       while(!stack2.isEmpty()) {
           System.out.print(stack2.pop().value);
       }
   }

   private static void bfs(Node root) {
       if(root == null) return;
       Queue<Node> queue = new LinkedList<>();
       queue.add(root);
       while(!queue.isEmpty()) {
           Node node = queue.poll();
           System.out.print(node.value);
           if(node.left != null) queue.offer(node.left);
           if(node.right != null) queue.offer(node.right);
       }
   }

   public static void main(String[] args) {
       Node nodeA = new Node("A");
       Node nodeB = new Node("B");
       Node nodeC = new Node("C");
       Node nodeD = new Node("D");
       Node nodeE = new Node("E");
       Node nodeF = new Node("F");
       Node nodeG = new Node("G");

       nodeA.left = nodeB;
       nodeA.right = nodeC;
       nodeB.left = nodeD;
       nodeB.right = nodeE;
       nodeC.right = nodeF;
       nodeE.left = nodeG;

       preOrder1(nodeA);
       System.out.println();
       preOrder2(nodeA);
       System.out.println();
       midOrder1(nodeA);
       System.out.println();
       midOrder2(nodeA);
       System.out.println();
       postOrder1(nodeA);
       System.out.println();
       postOrder2(nodeA);
       System.out.println();
       bfs(nodeA);
   }

   public static class Node {
       public String value;
       public Node left;
       public Node right;

       public Node(String value) {
           this.value = value;
       }
   }
}