Skip to content

数据结构和算法之旅(七)- 二叉树

约 409 字大约 1 分钟

数据结构tree二叉树

2017-03-09

树中每个节点最多俩个子节点,不同于完全二叉树,不需要每层都满。

定义

树中每个节点最多俩个子节点,不同于完全二叉树,不需要每层都满。

这种数据结构表示方式有俩种:
一种是TreeNode。
一种是数组。

TreeNode

数组

二叉树的遍历

层序遍历即是广度优先遍历,需要配合队列实现。
注:
以队列来层序遍历时针对TreeNode这种方式表示的二叉树。
如果用数组形式实现二叉树,则直接遍历数组即可,自然为层序遍历。

package org.example.datastructure.treetraversal;

/**
 * 递归方式遍历二叉树,前序、中序、后序
 */
public class TreeTraversal {
    public static void main(String[] args) {
        /**
         *         1
         *       /  \
         *      2    3
         *    /     /\
         *   4      5  6
         *
         */

        TreeNode root = new TreeNode(
                new TreeNode(
                        new TreeNode(4), 2, null), 1,
                new TreeNode(new TreeNode(5), 3, new TreeNode(6)
                )
        );

        System.out.println("前序遍历:");
        preOrder(root);
        System.out.println("\n中序遍历:");
        inOrder(root);
        System.out.println("\n后序遍历:");
        postOrder(root);
    }

    /**
     * 前序遍历
     */
    public static void preOrder(TreeNode node) {
        if (node == null) return;
        System.out.print(node.val + "\t");
        preOrder(node.left);
        preOrder(node.right);
    }

    /**
     * 中序遍历
     */
    public static void inOrder(TreeNode node) {
        if (node == null) return;
        inOrder(node.left);
        System.out.print(node.val + "\t");
        inOrder(node.right);
    }

    /**
     * 后序遍历
     */
    public static void postOrder(TreeNode node) {
        if (node == null) return;
        postOrder(node.left);
        postOrder(node.right);
        System.out.print(node.val + "\t");
    }

}