二叉树遍历(递归)

    添加时间:2013-5-4 点击量:

     // 测试二叉树遍历,递归算法
    
    public class TestBinaryTree {
    public static void main(String[] args) {
    Node
    <String> g = new Node<String>(G, nullnull);
    Node
    <String> e = new Node<String>(E, nullnull);
    Node
    <String> f = new Node<String>(F, nullnull);
    Node
    <String> d = new Node<String>(D, null, g);
    Node
    <String> b = new Node<String>(B, d, e);
    Node
    <String> c = new Node<String>(C, null, f);
    Node
    <String> a = new Node<String>(A, b, c);
    System.out.println(
    生成的二叉树:);
    System.out.println(
    A);
    System.out.println(
    | );
    System.out.println(
    |---------|);
    System.out.println(
    B C);
    System.out.println(
    | |);
    System.out.println(
    |---------| -----|);
    System.out.println(
    D E F);
    System.out.println(
    |);
    System.out.println(
    ----|);
    System.out.println(
    G);
    System.out.println(
    二叉树深度: + BinaryTree.getDepth(a));
    System.out.print(
    前序遍历:);
    BinaryTree.priorderTraversal(a);
    System.out.println();
    System.out.print(
    中序遍历:);
    BinaryTree.inorderTraversal(a);
    System.out.println();
    System.out.print(
    后序遍历:);
    BinaryTree.postorderTraversal(a);
    System.out.println();
    }
    }
    // 二叉树
    class BinaryTree {
    // 前序遍历
    static <T> void priorderTraversal(Node<T> node) {
    if (node != null) {
    visitNode(node);
    priorderTraversal(node.getLeftChild());
    priorderTraversal(node.getRightChild());
    }
    }
    // 中序遍历
    static <T> void inorderTraversal(Node<T> node) {
    if (node != null) {
    inorderTraversal(node.getLeftChild());
    visitNode(node);
    inorderTraversal(node.getRightChild());
    }
    }
    // 后序遍历
    static <T> void postorderTraversal(Node<T> node) {
    if (node != null) {
    postorderTraversal(node.getLeftChild());
    postorderTraversal(node.getRightChild());
    visitNode(node);
    }
    }
    // 二叉树深度
    static <T> int getDepth(Node<T> node) {
    if (node == null) {
    return 0;
    }
    int leftDepth = 0;
    int rightDepth = 0;
    leftDepth
    = getDepth(node.getLeftChild());
    rightDepth
    = getDepth(node.getRightChild());
    return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;
    }
    // 接见节点
    static <T> void visitNode(Node<T> node) {
    System.out.print(node.getKey()
    + );
    }
    }
    // 节点
    class Node<T> {
    private T key;
    private Node<T> leftChild;
    private Node<T> rightChild;
    public Node() {
    }
    public Node(T key, Node<T> leftChild, Node<T> rightChild) {
    super(); www.2cto.com
    this.key = key;
    this.leftChild = leftChild;
    this.rightChild = rightChild;
    }
    public T getKey() {
    return key;
    }
    public void setKey(T key) {
    this.key = key;
    }
    public Node<T> getLeftChild() {
    return leftChild;
    }
    public void setLeftChild(Node<T> leftChild) {
    this.leftChild = leftChild;
    }
    public Node<T> getRightChild() {
    return rightChild;
    }
    public void setRightChild(Node<T> rightChild) {
    this.rightChild = rightChild;
    }
    }



        输出成果:
        生成的二叉树:
        A
        |
        |---------|
        B         C
        |         |
        |---------|     -----|
        D         E          F
        |
        ----|
        G
        二叉树深度:4
        前序遍历:A B D G E C F
        中序遍历:D G B E A C F
        后序遍历:G D E B F C A

    所有随风而逝的都属于昨天的,所有历经风雨留下来的才是面向未来的。—— 玛格丽特·米切尔 《飘》
    分享到: