题目描述 给定一个二叉树,返回该二叉树的之字形层序遍历,(从左向右,下一层从右向左,一直这样交替)
例如: 给定的二叉树是{3,9,20,#,#,15,7},
5
/ \
4 8
/ \ / \
11 12 7 4
该二叉树之字形层序遍历的结果是:
[
[5]
[8][4]
[11][12][7][4]
]
解题思路:
- 本题考察的点依然是层序遍历
代码如下:
public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) {
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
ArrayList<TreeNode> list = new ArrayList<>();
if(root == null) return res;
int flag = 1;
list.add(root);
// 层次遍历
while(!list.isEmpty()){
ArrayList<Integer> temp = new ArrayList<>();
int len = list.size();
for(int i = 0; i < len; i++){
TreeNode p = list.remove(0);
temp.add(p.val);
if(p.left != null) list.add(p.left);
if(p.right != null) list.add(p.right);
}
// 每隔一行换个方向存储
if(flag == 1) flag = 0;
else
{
Collections.reverse(temp);
flag = 1;
}
res.add(new ArrayList<>(temp));
}
return res;
}