剑指 Offer 32 - II. 从上到下打印二叉树 II
题目:
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回其层次遍历结果:
[ [3], [9,20], [15,7] ]
提示:
节点总数 <= 1000
代码: //超时
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 class Solution { 11 public List<List<Integer>> levelOrder(TreeNode root) { 12 if(root==null){return null;} 13 List<List<TreeNode>> list =new ArrayList<>(); 14 List<TreeNode> list1=new ArrayList<>(); 15 list1.add(root); 16 list.add(list1); 17 18 //一层一个动态数组,循环放入listz中 19 for(int i=0;i<list.size();i++){ 20 List<TreeNode> tempList=list.get(i); 21 List<TreeNode> list2=new ArrayList<>(); 22 for(int j=0;j<tempList.size();j++){ 23 TreeNode temp=tempList.get(i); 24 if(temp.left!=null){list2.add(temp.left);} 25 if(temp.right!=null){list2.add(temp.right);} 26 } 27 list.add(list2); 28 } 29 //转换成返回类型 30 List<List<Integer>> res =new ArrayList<>(); 31 32 for(int i=0;i<list.size();i++){ 33 List<TreeNode> tempList=list.get(i); 34 Iterator iterator =tempList.iterator(); 35 List<Integer> res1=new ArrayList<>(); 36 while(iterator.hasNext()){ 37 res1.add(((TreeNode)iterator.next()).val); 38 } 39 res.add(res1); 40 41 } 42 43 return res; 44 45 } 46 }
代码2:
//大佬写的,我做不来,没想到可以用一个数t表示层数传入递归方法,然后在list中取出第t层的动态数组,然后直接放入动态数组中,膜拜大佬。
class Solution { List <List<Integer>> list=new ArrayList<>(); public List<List<Integer>> levelOrder(TreeNode root) { fun(root,0); return list; } public void fun(TreeNode root,int t){ if(root!=null){ if(t>=list.size()){ list.add(new ArrayList()); } list.get(t).add(root.val); fun(root.left,t+1); fun(root.right,t+1); } } }
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术