面试题32 - III. 从上到下打印二叉树 III(一般)
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
1 2 3 4 5
| [ [3], [20,9], [15,7] ]
|
提示:
节点总数 <= 1000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof
思路:
二叉树的层次遍历,和leetcode102差别不大,仅加了一个行号的判断,如果是偶数就反转,否则就照常输出
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> outputlist = new ArrayList<List<Integer>>(); if(root == null) return outputlist; Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.add(root); int level =0; while(!queue.isEmpty()){ level++; int count = queue.size(); List<Integer> tmplist = new ArrayList<Integer>(); while(count>0){ TreeNode node = queue.poll(); tmplist.add(node.val); if(node.left != null){ queue.offer(node.left); } if(node.right != null){ queue.offer(node.right); } count--; } if(level%2==0) Collections.reverse(tmplist); outputlist.add(tmplist); } return outputlist;
} }
|