请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
例如:
给定二叉树: [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[20,9],
[15,7]
]
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> ans = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
Queue<TreeNode> queue = new LinkedList<>();
if (root == null) return ans;
queue.add(root);
int level = 1;
while (!queue.isEmpty())
{
List<Integer> tmp = new ArrayList<>();
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
tmp.add(node.val);
if(level % 2 != 0)
{
if (node.left != null) stack.push(node.left);
if (node.right != null) stack.push(node.right);
}else{
if (node.right != null) stack.push(node.right);
if (node.left != null) stack.push(node.left);
}
}
int stack_size = stack.size();
for (int i = 0; i < stack_size; i++) {
queue.add(stack.pop());
}
ans.add(tmp);
level++;
}
return ans;
}