JAVA數據結構---二叉樹入門

本程序分爲四個文件:
節點類:Node.java
二叉樹類:BinaryTree.java
訪問類:Visit.java
主類測試:MainTest.java

(1)Node.java

public class Node<T> {

    public T data;
    private Node<T> left;
    private Node<T> right;

    // 初始化構造
    public Node() {
        left = null;
        right = null;
    }

    public Node(T tt, Node<T> lef, Node<T> rig) {
        data = tt;
        left = lef;
        right = rig;
    }

    // get方法
    public T getT() {
        return data;
    }

    public Node<T> getLeft() {
        return left;
    }

    public Node<T> getRight() {
        return right;
    }

}

(2)BinaryTree.java

public class BinaryTree<T> {
    private Node<T> root;

    private void preOrder(Node<T> t, Visit vs) {
        if (t != null) {
            vs.print(t.data);
            preOrder(t.getLeft(), vs);
            preOrder(t.getRight(), vs);
        }
    }

    private void midOrder(Node<T> t, Visit vs) {
        if (t != null) {
            midOrder(t.getLeft(), vs);
            vs.print(t.data);
            midOrder(t.getRight(), vs);
        }
    }

    private void postOrder(Node<T> t, Visit vs) {
        if (t != null) {
            postOrder(t.getLeft(), vs);
            postOrder(t.getRight(), vs);
            vs.print(t.data);
        }
    }

    public BinaryTree() {
        root = null;
    }

    public BinaryTree(T tt, BinaryTree<T> lef, BinaryTree<T> rig) {
        Node<T> l, r;
        if (lef == null)
            l = null;
        else
            l = lef.root;

        if (rig == null)
            r = null;
        else
            r = rig.root;

        root = new Node<T>(tt, l, r);
    }

    public void preOrder(Visit vs) {
        preOrder(root, vs);
    }

    public void midOrder(Visit vs) {
        midOrder(root, vs);
    }

    public void postOrder(Visit vs) {
        postOrder(root, vs);
    }

}

(3)Visit.java

public class Visit {

    public void print(Object item) {
        System.out.print(item + " ");
    }

}

(4)MainTest.java

public class MainTest {

    public static void main(String[] args) {

        BinaryTree<String> g = new BinaryTree<String>("G", null, null);
        BinaryTree<String> d = new BinaryTree<String>("D", null, g);
        BinaryTree<String> b = new BinaryTree<String>("B", d, null);
        BinaryTree<String> e = new BinaryTree<String>("E", null, null);
        BinaryTree<String> f = new BinaryTree<String>("F", null, null);
        BinaryTree<String> c = new BinaryTree<String>("C", e, f);
        BinaryTree<String> a = new BinaryTree<String>("A", b, c);

        Visit vs = new Visit();
        System.out.println("前序遍歷的結果是:");
        a.preOrder(vs);
        System.out.println();

        System.out.println("中序遍歷的結果是:");
        a.midOrder(vs);
        System.out.println();

        System.out.println("後序遍歷的結果是:");
        a.postOrder(vs);
        System.out.println();
    }

}

(5)測試結果

前序遍歷的結果是:
A B D G C E F 
中序遍歷的結果是:
D G B A E C F 
後序遍歷的結果是:
G D B E F C A 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章