二叉树的层次遍历2
二叉树的层次遍历,定义一个新的 TreeLevelNode 类记录当前节点属于哪一层。
初始化时,层数为0,并且将根节点赋值为第1层元素,再入队列。
出队列时,判断如果是新的一层的元素,则创建 list,并且半当前层数切换到新的层数。否则,list 不变,直接添加当前层的元素。
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
if(root == null){
return Collections.emptyList();
}
List<List<Integer>> result = new ArrayList<>();
levelOrder(root, result);
return result;
}
private void levelOrder(TreeNode root, List<List<Integer>> result){
Queue<TreeLevelNode> queue = new LinkedList<>();
TreeLevelNode levelRoot = new TreeLevelNode(root, 1);
//init
queue.offer(levelRoot);
int level = 0;
List<Integer> newLevelList = null;
while(!queue.isEmpty()){
TreeLevelNode current = queue.poll();
int nodeLevel = current.getLevel();
if(nodeLevel > level){
//用来保存新的一层元素
newLevelList = new LinkedList<>();
//
level = nodeLevel;
//创建了一个list 保存新的一层的元素,这一层的list对象 add 到 result。
result.add(newLevelList);
}
newLevelList.add(current.node.val);
if(current.node.left != null){
queue.offer(new TreeLevelNode(current.node.left, nodeLevel+1));
}
if(current.node.right != null){
queue.offer(new TreeLevelNode(current.node.right, nodeLevel+1));
}
}
}
private static class TreeLevelNode{
int level;
TreeNode node;
public TreeLevelNode(TreeNode node, int level){
this.node = node;
this.level = level;
}
public int getLevel(){
return level;
}
}
}
参考文档:二叉树的层序遍历算法实现
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?