今日题目(剑指Offer系列)
剑指 Offer 32 - III. 从上到下打印二叉树 III
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印, 第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
示例:
例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [3], [20,9], [15,7] ]
解题思路:
>本题目是要按照之字打印二叉树 >就是在层序遍历的基础上考虑奇偶层 >如果为偶层就将其按照原序输出 >否则将其按照逆序输出
Python解法:
class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: if not root: return [] queue=[root] res=[] k=0 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) if k%2==1: res.append(layer[::-1]) else: res.append(layer) k+=1 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(); int k=0; 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); } } if(k%2==0){ list.add(l); } else{ Collections.reverse(l); list.add(l); } k+=1; } return list; } }