JAVA数据结构与算法第五天(五)

前一篇文章写的是汉诺塔,如果还是对汉诺塔没有有疑问的,那么,下面的三种二叉树的遍历会进一步帮助我们理解汉诺塔;

树:

二叉树的遍历:1,先序遍历;2,中序遍历;3,后序遍历;

JAVA数据结构与算法第五天(五)

上示例代码:

/**
 * 二叉树
 */
public class Binaray {

    Node<String> root;
    public Binaray(String data) {
        root = new Node<>(data, null, null);
    }

    public void createTree(){

        /**
         *             root
         *         B           C
         *       D  E        F  G
         *     H
         *
         */
        Node<String> nodeB = new Node<>("B", null, null);
        Node<String> nodeC = new Node<>("C", null, null);
        Node<String> nodeD = new Node<>("D", null, null);
        Node<String> nodeE = new Node<>("E", null, null);
        Node<String> nodeF = new Node<>("F", null, null);
        Node<String> nodeG = new Node<>("G", null, null);
        Node<String> nodeH = new Node<>("H", null, null);

        root.leftChild = nodeB;
        root.rightChild = nodeC;

        nodeB.leftChild = nodeD;
        nodeB.rightChild = nodeE;

        nodeC.leftChild = nodeF;
        nodeC.rightChild = nodeG;

        nodeD.leftChild = nodeH;
    }

    /**
     * 节点
     */
    public class Node<T>{
        String data;
        /**
         * 左孩子和右孩子
         */
        Node<T> leftChild;
        Node<T> rightChild;

        public Node(String data, Node<T> leftChild, Node<T> rightChild) {
            this.data = data;
            this.leftChild = leftChild;
            this.rightChild = rightChild;
        }

    }

    /**
     * 中序遍历
     * @param root
     */
    public void midOrderTraverse(Node root){
        if (null == root){
            return;
        }
        midOrderTraverse(root.leftChild);
        System.out.println("mid" + root.data);

        midOrderTraverse(root.rightChild);

    }
    /**
     * 前序遍历
     * @param root
     */
    public void preOrderTraverse(Node root){
        if (null == root){
            return;
        }
        System.out.println("pre" + root.data);
        preOrderTraverse(root.leftChild);
        preOrderTraverse(root.rightChild);

    }
    /**
     * 后序遍历
     * @param root
     */
    public void lastOrderTraverse(Node root){
        if (null == root){
            return;
        }
        lastOrderTraverse(root.leftChild);
        lastOrderTraverse(root.rightChild);
        System.out.println("last" + root.data);

    }
}

 

测试代码:

 @Test
    public void testBinarayTree(){
        Binaray binaray = new Binaray("A");
        binaray.createTree();
//        binaray.midOrderTraverse(binaray.root);
//        binaray.preOrderTraverse(binaray.root);
        binaray.lastOrderTraverse(binaray.root);
    }