二叉树的深度遍历(前序遍历、中序遍历、后序遍历),广度遍历(层序遍历) -- java实现

接前一篇二叉树的创建, https://blog.csdn.net/jian876601394/article/details/105478477

创建好二叉树后,这次进行二叉树的深度遍历(前序、中序、后序)


    /**
     * 前序遍历, 父-左-右
     *
     * @author DangerShi
     * @param treeNode
     */
    public void preOrderTraverse(TreeNode treeNode) {
        if (treeNode == null) {
            return;
        }
        // 输出节点数据(或对数据进行其他操作)
        System.out.println(treeNode.data);
        // 遍历左子树
        preOrderTraverse(treeNode.left);
        // 遍历右子树
        preOrderTraverse(treeNode.right);
    }

    /**
     * 中序遍历, 左-父-右
     *
     * @author DangerShi
     * @param treeNode
     */
    public void inOrderTraverse(TreeNode treeNode) {
        if (treeNode == null) {
            return;
        }
        // 遍历左子树
        inOrderTraverse(treeNode.left);
        // 输出节点数据(或对数据进行其他操作)
        System.out.println(treeNode.data);
        // 遍历右子树
        inOrderTraverse(treeNode.right);
    }

    /**
     * 后序遍历, 左-右-父
     *
     * @author DangerShi
     * @param treeNode
     */
    public void postOrderTraverse(TreeNode treeNode) {
        if (treeNode == null) {
            return;
        }
        // 先遍历左子树
        postOrderTraverse(treeNode.left);
        // 再遍历右子树
        postOrderTraverse(treeNode.right);
        // 输出节点数据(或对数据进行其他操作)
        System.out.println(treeNode.data);
    }

    /**
     * 层序遍历,借助队列来实现
     * 将node放入队列,取出node.data,若node有子节点,则将子节点放入队列;
     * 重复该步骤,直到队列为空
     *
     * @author DangerShi
     * @param treeNode
     */
    public void sequenceTraverse(TreeNode treeNode) throws InterruptedException {
        if (treeNode == null) {
            return;
        }
        Queue<TreeNode> queue = new LinkedBlockingQueue<>();
        queue.add(treeNode);
        while (!queue.isEmpty()) {
            TreeNode node = queue.poll();
            System.out.println(node.data);
            if (node.left != null) {
                queue.add(node.left);
            }
            if (node.right != null) {
                queue.add(node.right);
            }
        }
    }

    @Test
    public void test() throws InterruptedException {
        /**
         *          1
         *      2       3
         *    4   5   6   7
         */
        TreeNode treeNode = arrayToBTree(new Object[]{1,2,3,4,5,6,7});
        System.out.println("----前序遍历----");
        preOrderTraverse(treeNode);
        System.out.println("----中序遍历----");
        inOrderTraverse(treeNode);
        System.out.println("----后序遍历----");
        postOrderTraverse(treeNode);
        System.out.println("----层序遍历----");
        sequenceTraverse(treeNode);
    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值