二叉树的前序、中序、后序遍历(递归)

二叉树的遍历有前序、中序、后序、层序遍历等等。

前序遍历为针对一个二叉树的所有子树而言,访问的顺序为根节点->左子节点->右子节点。中序遍历的访问顺序为左子节点->根节点->右子节点。后序遍历的访问顺序为左子节点->右子节点->根节点。

如下二叉树:

前序遍历为: 124758369

中序遍历为: 742851693

后序遍历为: 748529631

二叉树的遍历可以分解为多个小的子树进行遍历,与递归思想很接近,下面使用递归的方式实现三种遍历:

二叉树节点定义类:

public class TreeNode {
    private String data;

    private TreeNode left;

    private TreeNode right;

    public TreeNode(String data, TreeNode left, TreeNode right) {

        this.data = data;
        this.left = left;
        this.right = right;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public TreeNode getLeft() {
        return left;
    }

    public void setLeft(TreeNode left) {
        this.left = left;
    }

    public TreeNode getRight() {
        return right;
    }

    public void setRight(TreeNode right) {
        this.right = right;
    }
}

前序遍历:

//前序遍历
    public static void pre(TreeNode treeNode) {
        System.out.print(treeNode.getData()+" ");
        if (treeNode.getLeft() != null) {
            pre(treeNode.getLeft());
        }
        if (treeNode.getRight() != null) {
            pre(treeNode.getRight());
        }

    }

中序遍历

//中序遍历
    public static void in(TreeNode treeNode) {
        if (treeNode.getLeft() != null) {
            in(treeNode.getLeft());
        }
        System.out.print(treeNode.getData()+" ");

        if (treeNode.getRight() != null) {
            in(treeNode.getRight());
        }
    }

后序遍历:

//后序遍历
    public static void post(TreeNode treeNode) {
        if (treeNode.getLeft() != null) {
            post(treeNode.getLeft());
        }
        if (treeNode.getRight() != null) {
            post(treeNode.getRight());
        }
        System.out.print(treeNode.getData()+" ");
    }
经验分享 程序员 微信小程序 职场和发展