【数据结构和算法】BFS和DFS两种方式解决

求二叉树的层序遍历

http://www.nowcoder.com/questionTerminal/04a5560e43e24e9db4595865dc9c63a3

1,BFS解决

其实这就是二叉树的BFS,也可以看下之前讲的373,数据结构-6,树

图片说明 就是这样,一层一层打印,使用队列解决

    public ArrayList<arraylist<integer>&gt; levelOrder(TreeNode root) {
        //边界条件判断
        if (root == null)
            return new ArrayList&lt;&gt;();
        //队列
        Queue<treenode> queue = new LinkedList&lt;&gt;();
        ArrayList<arraylist<integer>&gt; res = new ArrayList&lt;&gt;();
        //根节点入队
        queue.add(root);
        //如果队列不为空就继续循环
        while (!queue.isEmpty()) {
            //BFS打印,levelNum表示的是每层的结点数
            int levelNum = queue.size();
            //subList存储的是每层的结点值
            ArrayList<integer> subList = new ArrayList&lt;&gt;();
            for (int i = 0; i &lt; levelNum; i++) {
                //出队
                TreeNode node = queue.poll();
                subList.add(node.val);
                //左右子节点如果不为空就加入到队列中
                if (node.left != null)
                    queue.add(node.left);
                if (node.right != null)
                    queue.add(node.right);
            }
            //把每层的结点值存储在res中,
            res.add(subList);
        }
        return res;
    }

2,DFS解决

这题让一层一层的打印,其实就是BFS,但使用DFS也是可以解决的,看一下

    public ArrayList<arraylist<integer>&gt; levelOrder(TreeNode root) {
        ArrayList<arraylist<integer>&gt; res = new ArrayList&lt;&gt;();
        levelHelper(res, root, 0);
        return res;
    }

    public void levelHelper(ArrayList<arraylist<integer>&gt; list, TreeNode root, int level) {
        //边界条件判断
        if (root == null)
            return;
        //level表示的是层数,如果level &gt;= list.size(),说明到下一层了,所以
        //要先把下一层的list初始化,防止下面add的时候出现空指针异常
        if (level &gt;= list.size()) {
            list.add(new ArrayList&lt;&gt;());
        }
        //level表示的是第几层,这里访问到第几层,我们就把数据加入到第几层
        list.get(level).add(root.val);
        //当前节点访问完之后,再使用递归的方式分别访问当前节点的左右子节点
        levelHelper(list, root.left, level + 1);
        levelHelper(list, root.right, level + 1);
    }

如果觉得有用就给个赞吧,还可以关注我的《牛客博客》

数据结构和算法 文章被收录于专栏

专注于算法题的讲解,包含常见数据结构,排序,查找,动态规划,回溯算法,贪心算法,双指针,BFS和DFS等等。

全部评论
想问问 {3,9,20,#,#,15,7} 是怎么画出二叉树的?
点赞 回复 分享
发布于 2021-01-12 18:44

相关推荐

2025-12-16 17:17
门头沟学院 产品经理
烤点老白薯:他第二句话的潜台词是想让你帮他点个瑞幸或者喜茶啥的
mt对你说过最有启发的一...
点赞 评论 收藏
分享
点赞 评论 收藏
分享
2025-12-27 22:36
门头沟学院 Java
点赞 评论 收藏
分享
评论
15
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务