天天看点

二叉树的建立与前、中、后、层次遍历

/*
2011-9-19
author:BearFly1990
*/
package algorithm;

import java.util.LinkedList;
import java.util.Queue;

public class BinaryTreeTraverse {
    public static void main(String[] args) {
        String tree = "1234567";
        Node head = createBiTree(tree);
       
        preOrderTraverse(head);
        System.out.println();
        inOrderTraverse(head);
        System.out.println();
        postOrderTraverse(head);
        System.out.println();
        LayerOrderTraverse(head);
        System.out.println();
    }
    private static Node createBiTree(String str){
        Queue<Node> parents = new LinkedList<Node>();
        Queue<Node> children = new LinkedList<Node>();
        for(int i = 0; i < str.length(); i++){
            children.add(new Node(new Integer(str.charAt(i)-'0')));
        }
        Node parent = children.poll();
        parents.add(parent);
        while(!parents.isEmpty() && !children.isEmpty()){
            Node tparent = parents.poll();
            Node tleft = children.poll();
            Node tright = children.poll();
            tparent.setLeftChild(tleft);
            tparent.setRightChild(tright);
            parents.add(tleft);
            parents.add(tright);
        }
        return parent;
    }
    private static void LayerOrderTraverse(Node node) {
        Queue<Node> q = new LinkedList<Node>();
        q.add(node);
        while(!q.isEmpty()){
            Node temp = q.poll();
            System.out.printf("%d ", temp.value);
            Node leftChild = temp.getLeftChild();
            Node rightChild = temp.getRightChild();
            if(leftChild != null)q.add(leftChild);
            if(rightChild != null)q.add(rightChild);
        }
    }
    private static void postOrderTraverse(Node node) {
        if( node == null)return;
        postOrderTraverse(node.getLeftChild());
        postOrderTraverse(node.getRightChild());
        System.out.printf("%d ",node.getValue());
    }
    private static void inOrderTraverse(Node node) {
        if(node == null){
            return;
        }
        inOrderTraverse(node.getLeftChild());
        System.out.printf("%d ",node.getValue());
        inOrderTraverse(node.getRightChild());
    }
    private static void preOrderTraverse(Node node) {
        if(node == null){
            return;
        }
        System.out.printf("%d ",node.getValue());
        preOrderTraverse(node.getLeftChild());
        preOrderTraverse(node.getRightChild());
    }
    private static class Node{
        private Integer value;
        private Node leftChild;
        private Node rightChild;
        public Node(Integer value) {
            this.value = value;
        }
        public Integer getValue() {
            return value;
        }
        public void setValue(Integer value) {
            this.value = value;
        }
        public Node getLeftChild() {
            return leftChild;
        }
        public void setLeftChild(Node leftChild) {
            this.leftChild = leftChild;
        }
        public Node getRightChild() {
            return rightChild;
        }
        public void setRightChild(Node rightChild) {
            this.rightChild = rightChild;
        }
    }
}