从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [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); } } }
剑指 Offer 32 - II. 从上到下打印二叉树 II
原文:https://www.cnblogs.com/SEU-ZCY/p/14605295.html