层序遍历+链表翻转+标志位
1、根据题目意思就是要一层一层的获取二叉树,一层是正着来,一层是反着来,即Z字型。
想法:先层序遍历吧,肯定要一层一层来嘛!
然后的想法:一下从左到右,下一个从右到左,怎么来搞呢?emmmmm,标志位试一下哇!
flag=0 从左到右打印就是正常的遍历就可以了哇,然后就把flag=1
flag=1 链表就要反转,此时我查了一下ArrayList里面有一个set函数,可以把链表翻转,重新来个函数,当标志位为1,就翻转。
剩下的就是细节处理,可以看代码了!!!
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer> > res = new ArrayList<ArrayList<Integer> >();
if(pRoot == null){
return res;
}
Queue<TreeNode> rear = new LinkedList<>();
rear.add(pRoot);
int flag = 0;
while( !rear.isEmpty() ){
int size = rear.size();
ArrayList<Integer> list = new ArrayList<>();
while(size-- > 0){
TreeNode temp = rear.poll();
list.add(temp.val);
if(temp.left != null){
rear.add(temp.left);
}
if(temp.right != null){
rear.add(temp.right);
}
}
if(flag == 0){
flag = 1;
}else if(flag == 1){
Reverse(list);
flag = 0;
}
res.add(list);
}
return res;
}
public ArrayList<Integer> Reverse(ArrayList<Integer> list){
int top = 0;
int end = list.size()-1;
while(top < end){
int temp = list.get(top);
list.set(top,list.get(end));
list.set(end,temp);
top++;
end--;
}
return list;
}
}
京公网安备 11010502036488号