从上到下打印二叉树III
和前面那题目相比多了一个奇数偶数打印顺序
定义一个层数,奇数层就反转
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> reu = new ArrayList<>();
//如果根节点为空就返回一个空的集合
if(root == null) return reu;
//定义一个存放节点的数组
List<TreeNode> tarr = new ArrayList<TreeNode>();
//先把根节点加进去
tarr.add(root);
//定义层数
int i = 0;
//和前面那道题一样
while(tarr.size()!=0){
//在这里面还要重新定义两个数组,用于存放每层的
List<Integer> narr = new ArrayList<Integer>();
List<TreeNode> carr = new ArrayList<TreeNode>();
while(tarr.size()!=0){
TreeNode temp = tarr.get(0);
tarr.remove(0);
//存放值
narr.add(temp.val);
//将根节点的左右节点放在新的节点数组中
if(temp.left!=null) carr.add(temp.left);
if(temp.right!=null) carr.add(temp.right);
}
if(i%2 != 0){Collections.reverse(narr); }
i++;
//将每一层加入数组中
reu.add(narr);
//while结束说明此时tarr是空的,但是carr因为加入了左右节点,所以不为空
//此时tarr是对carr的引用
tarr = carr;
}
return reu;
}
}
另一个同学是定义了标志位
官方
这个是根据返回的数组的维度,维度是奇数来判断再第几层,看看是奇数层还是偶数层,如果是奇数层那就应该是正序,偶数层倒序,
在这个方法中层数从0开始,也就是按照索引号来的。第一层实际是0.第二层实际是1,……,在第二层(实际是1)(res.size()=1)应该是倒序,所以addFirst,每出队列一个数据都要加在队列头部,也就是倒序了,以此类推
这个就是把两种情况按照顺序来了,本来层数1234就是先奇数层崽偶数层,所以先把奇数层打印完毕,奇数层就是应该从左到右移除添加,然后子树也是从左到右依次添加,然后去执行偶数层,偶数层就是从右向左倒序打印了,移除最后一个节点,然后把他的子树从右到左加入,并且加在表头位置,实际上就是正序的列表,然后添加到res中,再去及奇数层
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。