二叉树的层序遍历 Java广度优先搜索(二叉树广度遍历和深度遍历)

您所在的位置:网站首页 java深度优先搜索 二叉树的层序遍历 Java广度优先搜索(二叉树广度遍历和深度遍历)

二叉树的层序遍历 Java广度优先搜索(二叉树广度遍历和深度遍历)

2023-03-14 03:02| 来源: 网络整理| 查看: 265

一、题目描述

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。

示例: 二叉树:[3,9,20,null,null,15,7],

    3    / \   9  20      /  \    15   7 返回其层序遍历结果:

[   [3],   [9,20],   [15,7] ]

二、思路讲解

        看到二叉树按层来遍历,我们首先想到的就是广度优先搜索bfs。但是此题与单纯的bfs不一样的点在于:题目中要按层分数组来返回,单纯的bfs是混在一起返回的,虽然顺序是按层的顺序,但是不同层之间并没有分隔。

所以,我们需要改变的部分就是把bfs遍历出来的节点按层分好。

        我们可以在遍历每一层的时候获取一下当前队列的大小(队列中的节点都是一层的),将队列中的节点一次性弹出(同时也要压入下一层的节点);然后再获取队列中的大小,再一次性弹出,这样就可以保证按层来输出了。

三、java代码实现 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public List levelOrder(TreeNode root) { //题目中要求返回的列表 List list = new ArrayList(); //bfs所用的队列 Queue queue = new LinkedList(); if(root != null){ queue.add(root); } while(!queue.isEmpty()){ List level = new ArrayList(); int n = queue.size(); //一次性把一层的节点遍历完,n只起到次数控制的作用 for(int i=0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3