给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal
层序遍历最主要的就是要记录下每一层的节点信息,之后遍历该层,题目比较简单没啥疑问的,直接上解题过程
package com.ucarinc.wtf.demo;
import com.ucarinc.wtf.demo.Tree.TreeNode;
import java.util.LinkedList;
import java.util.List;
/**
* @ProjectName: shiro-demo
* @ClassName: LevelOrder
* @Author: tengfei.wu01@ucarinc.com
* @Description: 二叉树广度优先搜索
* @Date: 2020/5/13 9:49
* @Version: 1.0
*/
public class LevelOrder {
public static List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new LinkedList<>();
if (root != null) {
//辅助链表 用来存储每层树节点
List<TreeNode> treeNodes = new LinkedList<>();
treeNodes.add(root);
//当前层存在节点时
while (!treeNodes.isEmpty()){
List<Integer> levelVal = new LinkedList<>();
//将当前层节点全部移除并存储层数据,如果存在子节点则新增至辅助链表末尾,表示下一层节点
int size = treeNodes.size();
for (int i = 0; i < size; i++){
TreeNode treeNode = treeNodes.remove(0);
levelVal.add(treeNode.val);
if (treeNode.left != null){
treeNodes.add(treeNode.left);
}
if (treeNode.right != null){
treeNodes.add(treeNode.right);
}
}
result.add(levelVal);
}
}
return result;
}
}