数据结构之二叉树的遍历4(java)
  kIM7GUNpnV3x 2023年11月24日 25 0

一:概述

深度优先遍历是在一个方向上“一头扎到底”,广度优先遍历则是与其相反的:在各个方向上各走出1步,再在各个方向上走出第2步、第3步.....一直到各个方向全部走完。听起来有些抽象,下面是通过二叉树的层序遍历,来看看广度优先遍历具体过程。

层序遍历,就是二叉树按照从根节点到叶子节点的层次关系,一层一层横向遍历各个节点。

如下图所示:

                           数据结构之二叉树的遍历4(java)_层序遍历

上图就是一个二叉树的层序遍历,每个节点左侧的序号代表该节点的输出顺序。可是,二叉树同一层次的节点之间是没有直接联系的,下面通过数据结构队列来讲解关于它的遍历。

二 广度遍历具体过程

<1>根节点1进入队列。

                           数据结构之二叉树的遍历4(java)_出队_02

<2>节点1出队,输出节点1,并得到节点1的左孩子节点2、右孩子节点3.让节点2和节点3入队。

                           数据结构之二叉树的遍历4(java)_二叉树_03

<3>节点2出队,输出节点2,并得到节点2的左孩子节点4、右孩子节点5.让节点4和节点5入队

                           数据结构之二叉树的遍历4(java)_出队_04

<4>节点3出队,输出节点3,并得到节点3的右孩子节点6.让节点6入队。

                           数据结构之二叉树的遍历4(java)_二叉树_05

<5>节点4出队,输出节点4,由于节点4没有孩子节点,所以没有新节点入队。

                           数据结构之二叉树的遍历4(java)_二叉树_06

<6>节点5出队,输出节点5,由于节点5同样没有孩子节点,所以没有新节点入队。

                           数据结构之二叉树的遍历4(java)_层序遍历_07

<7>节点6出队,输出节点6,节点6没有孩子节点,没有新节点入队

                           数据结构之二叉树的遍历4(java)_出队_08

到这一步,所有的节点都已经遍历输出完毕。

下面二叉树层序遍历的代码实现:

public static void preOrderTraveralWithStack(TreeNode root) {
        Stack<TreeNode> stack = new Stack<TreeNode>();
        TreeNode treeNode = root;
        while(treeNode != null || !stack.isEmpty()) {
            //迭代访问节点的左孩子,并入栈
            while (treeNode != null) {
                System.out.println(treeNode.data);
                stack.push(treeNode);
                treeNode = treeNode.leftChild;
            }
            // 如果节点没有左孩子,则弹出栈顶节点,访问节点右孩子
            if(!stack.isEmpty()) {
                treeNode = stack.pop();
                treeNode = treeNode.rightChild;
            }
        }
    }

       







【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月24日 0

暂无评论

kIM7GUNpnV3x