二叉树的先序中序后序介绍及代码

本文介绍了二叉树的基本概念,通过一个实例展示了如何根据前序和中序遍历构建二叉树,并给出了二叉树先序、中序和后序遍历的代码实现。此外,还提供了完整的代码示例和预期输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                         二叉树的遍历介绍及代码

1.二叉树的介绍
例子:已知前序中序遍历求后序遍历
前序:A,B,D,H,I,E,J,K,C,F,L,M,G,N,O
中序:H,D,I,B,J,E,K,A,L,F,M,C,N,G,O
在这里插入图片描述
首先我们先根据前序可以判断出根节点为A,然后通过前序和后序可以画出来二叉树的分布图,再根据后序遍历的规则得出后序遍历为:H,I,D,J,K,E,B,L,M,F,N,O,G,C,A
2.代码介绍
每个数据添加进二叉树时,也和链表类似,需要创建节点,不同的是,前者有两个指针域,代表左右子树
示例:在这里插入图片描述
建立如上题树
在这里插入图片描述
在这里插入图片描述
上代码如下图
在这里插入图片描述
3.二叉树的遍历
二叉树遍历需要记忆的就前中后序三种遍历,这三种遍历的前还是中还是后其实是以访问数据域的顺序决定的

3.1 先序
在这里插入图片描述
3.2中序
在这里插入图片描述
3.3后序
在这里插入图片描述
4.完整代码

class BianLi {
    /**
     * 先序遍历
     */
    public void xianxu(TreeNode root) {
        if (root != null)
            System.out.print(root.getData());
        if (root.getLeft() != null)
            xianxu(root.getLeft());
        if (root.getRight() != null)
            xianxu(root.getRight());
    }

    /**
     * 中序遍历
     */
    public void zhongxu(TreeNode root) {

        if (root.getLeft() != null)
            zhongxu(root.getLeft());
        if (root != null)
            System.out.print(root.getData());
        if (root.getRight() != null)
            zhongxu(root.getRight());
    }

    /**
     * 后序遍历
     */
    public void houxu(TreeNode root) {

        if (root.getLeft() != null)
            houxu(root.getLeft());
        if (root.getRight() != null)
            houxu(root.getRight());
        if (root != null)
            System.out.print(root.getData());
    }
}


public class MainClass {
    public static void main(String[] args) {
        TreeNode root = null;
        root = new TreeNode();
        root.setData("A");

        TreeNode l1 = new TreeNode();
        l1.setData("B");

        root.setLeft(l1);

        TreeNode r1 = new TreeNode();
        r1.setData("C");

        root.setRight(r1);

        TreeNode l1l2 = new TreeNode();
        l1l2.setData("D");
        l1.setLeft(l1l2);

        TreeNode l1r2 = new TreeNode();
        l1r2.setData("E");
        l1.setRight(l1r2);

        TreeNode l1l3 = new TreeNode();
        l1l3.setData("H");
        l1l2.setLeft(l1l3);

        TreeNode l1r3 = new TreeNode();
        l1r3.setData("I");
        l1l2.setRight(l1r3);

        TreeNode r2l1 = new TreeNode();
        r2l1.setData("J");
        l1r2.setLeft(r2l1);

        TreeNode r2r1 = new TreeNode();
        r2r1.setData("K");
        l1r2.setRight(r2r1);

        TreeNode r1l1 = new TreeNode();
        r1l1.setData("F");
        r1.setLeft(r1l1);

        TreeNode r1l2 = new TreeNode();
        r1l2.setData("L");
        r1l1.setLeft(r1l2);

        TreeNode r1r2 = new TreeNode();
        r1r2.setData("M");
        r1l1.setRight(r1r2);

        TreeNode r1r3 = new TreeNode();
        r1r3.setData("G");
        r1.setRight(r1r3);

        TreeNode r3l1 = new TreeNode();
        r3l1.setData("N");
        r1r3.setLeft(r3l1);

        TreeNode r3r1 = new TreeNode();
        r3r1.setData("O");
        r1r3.setRight(r3r1);
        System.out.println("先序:");
        new BianLi().xianxu(root);
        System.out.println("中序:");
        new BianLi().zhongxu(root);
        System.out.println("后序:");
        new BianLi().houxu(root);

    }
}



5.输出结果
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值