问题描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
解题思路
在按层次遍历的基础上,增加方向标记标量,以及实现逆序的代码即可。
代码
public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer> > res = new ArrayList<ArrayList<Integer> >();
if(pRoot==null) return res;
ArrayList<TreeNode> cur = new ArrayList<>();
cur.add(pRoot);
int dir=1; // 1:->,0:<-
while(cur.size()>0){
ArrayList<TreeNode> next = new ArrayList<>();
ArrayList<Integer> curNums = new ArrayList<Integer>();
for(TreeNode node:cur){
curNums.add((int)node.val);
if(node.left!=null) next.add(node.left);
if(node.right!=null) next.add(node.right);
}
if(dir==1){
res.add(curNums);
dir=0;
}else if(dir==0){
ArrayList<Integer> reverseCurNums = new ArrayList<Integer>();
for(int i=curNums.size()-1;i>=0;i--){
reverseCurNums.add(curNums.get(i));
}
res.add(reverseCurNums);
dir=1;
}
cur = next;
}
return res;
}