今日题目(剑指Offer系列)
剑指 Offer 32 - II. 从上到下打印二叉树 II
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
示例:
例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [3], [9,20], [15,7] ]
解题思路:
>改问题的本质还是层序遍历 >只不过是把每层遍历的节点存到一个小列表里面 >最终将每一层的小列表存到一个到大列表 >这时就需要一个size来控制每层的数量 >在每层需要遍历size次,将该层的节点全部遍历
Python解法:
class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: if not root: return [] queue=[root] res=[] while queue: layer=[] size=len(queue) for i in range(size): tmp=queue.pop(0) layer.append(tmp.val) if tmp.left: queue.append(tmp.left) if tmp.right: queue.append(tmp.right) res.append(layer) return res
Java解法:
class Solution { public List<List<Integer>> levelOrder(TreeNode root) { if(root==null) { return new ArrayList(); } Queue<TreeNode> queue=new LinkedList<TreeNode>(); queue.add(root); List<List<Integer>> list=new ArrayList(); while(!queue.isEmpty()) { int size=queue.size(); List<Integer> l=new ArrayList<Integer>(); for(int i=0;i<size;i++) { TreeNode tmp=queue.poll(); l.add(tmp.val); if(tmp.left!=null) { queue.add(tmp.left); } if(tmp.right!=null) { queue.add(tmp.right); } } list.add(l); } return list; } }