JAVA数据结构---二叉树入门

来源:互联网 发布:rails application.js 编辑:程序博客网 时间:2024/04/27 17:07

本程序分为四个文件:
节点类: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 
0 0