二叉树的层序遍历 Java广度优先搜索(二叉树广度遍历和深度遍历) |
您所在的位置:网站首页 › java深度优先搜索 › 二叉树的层序遍历 Java广度优先搜索(二叉树广度遍历和深度遍历) |
一、题目描述
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例: 二叉树:[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 |