您当前的位置: 首页 > 

染指流年灬

暂无认证

  • 2浏览

    0关注

    194博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

二叉树的广度优先遍历

染指流年灬 发布时间:2022-04-23 12:53:07 ,浏览量:2

原文: 数据结构—二叉树广度优先遍历

如果说深度遍历是在一个方向上“一头扎到底”,那么广度遍历则恰恰相反,现在各个方向上走出第1步,再在各个方向上走出第2步,第3步…一直在各个方向上全部走完。学习二叉树层序遍历时,第一次发现数据结构还是挺有意思的,选用不同的数据结构,对完成数据操作的难易程度和效率都有很大影响,根据不同业务场景,选择合适的数据结构,至关重要。

在这里插入图片描述

详细遍历步骤如下 1)根节点1进入队列; 2)节点1出队, 输出节点1, 并得到节点1的左子节点2、 右子节点3, 让节点2和节点3入队; 3)节点2出队,输出节点2,并得到节点2的左子节点4、 右子节点 5, 让节点4和节点5入队; 4)节点3出队, 输出节点3, 并得到节点3的右子节点6,让节点6入 队; 5)节点4出队, 输出节点4, 由于节点4没有孩子节点, 所以没有新节点入队; 6)节点5出队, 输出节点5, 由于节点5没有孩子节点, 所以没有新节点入队; 7)节点6出队, 输出节点6, 节点6没有子节点, 没有新节点入队。 至此遍历完毕。

在这里插入图片描述 广度优先遍历比深度优先简单很多

这个思想,对于普通数和二叉树,都是成立的。

代码

最近真在实际运用中用到了这个东西

下面是简单版的代码

public void BreadthFirstSearch(ResourceNode rootNode)
    {
        Queue queue = new Queue();
        
        queue.Enqueue(rootNode);
        
        
        while (queue.Count > 0)
        {
            ResourceNode currentNode = queue.Dequeue();

            foreach (var dependency in 
                currentNode.antiDependencies)
            { 
                queue.Enqueue(dependency);
            }
        }
    }

如果要区分层,思路是将每层的个数记录起来,当出队列的个数达到每层个数的时候,就进入了下一层。每层的个数等于上一层所有节点的子节点的个数总和。 留个概念吧,构想好思路后发现实际暂时不需要。

关注
打赏
1665909078
查看更多评论
立即登录/注册

微信扫码登录

0.0338s