请实现一个函数按照之字形打印二叉树。
即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路:
是直接基于 多行打印二叉树的题解, 在对偶数行进行逆序,即可满足条件。
但是奇怪的是,如下的代码,总是报错:
// import java.util.ArrayList;
// /*
// public class TreeNode {
// int val = 0;
// TreeNode left = null;
// TreeNode right = null;
// public TreeNode(int val) {
// this.val = val;
// }
// }
// */
// // 看到整个问题的第一个思路,就是直接使用 多行打印二叉树的解法, 等最后得到一个二维数组后,
// // 对下标(下标从0开始)为奇数的行,进行反转倒序,再依次进行打印输出
// public class Solution {
// public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
// }
// }
import java.util.Collections;
import java.util.*;
public class Solution {
ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
//新建一个 二维数组,用于存放每行二叉树的节点值
ArrayList<ArrayList<Integer>> thelist = new ArrayList<ArrayList<Integer>>();
// 注意该入口函数的返回值是个二维数组,容易写错返回值
if(pRoot==null) return thelist; //这里要求返回thelist而不是null
// 层序遍历会利用到 队列数据结构,此处新建一个队列,并将根节点加入到队列中
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(pRoot);
int count = 1;
while( !queue.isEmpty() ) {
// 此处新建一个一维数组,用于存放每一行的节点的值
ArrayList<Integer> list = new ArrayList<Integer>();
int size = queue.size();
for(int i=0;i<size;i++) {
//将每行的节点值加入到一维数组中
TreeNode temp = queue.poll();
list.add(temp.val);
if(temp.left!=null) queue.offer(temp.left);
if(temp.right!=null) queue.offer(temp.right);
}
if(count%2==1) {
Collections.reverse(list);
thelist.add(list);
}else {
thelist.add(list);
}
count++;
}
// for(int i=0; i<thelist.size(); i++){
// if(i%2==1) {
// Collections.reverse(thelist[i]);
// }
// }
return thelist;
}
}
看一下,别人的代码能够运行编译通过....
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> thelist = new ArrayList<ArrayList<Integer>>();
if(pRoot==null) return thelist; //这里要求返回thelist而不是null
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(pRoot);
// 此处用于标记当前行是 奇数行,还是偶数行
int count = 1;
while(!queue.isEmpty()) {
ArrayList<Integer> list = new ArrayList<Integer>();
int size = queue.size();
for(int i=0;i<size;i++){
TreeNode temp = queue.poll();
list.add(temp.val);
if(temp.left!=null) queue.offer(temp.left);
if(temp.right!=null) queue.offer(temp.right);
}
// 对偶数行的数组进行逆序,再加入到二维数组中
if(count%2==0){
Collections.reverse(list);
thelist.add(list);
} else {
thelist.add(list);
}
count++;
}
return thelist;
}
}