解题思路1:
import java.util.ArrayList;
import java.util.Stack;
import java.util.Queue;
import java.util.LinkedList;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
//树的层数
int layer = 1;
//奇数层
Queue<TreeNode> q1 = new LinkedList<>();
//偶数层
Queue<TreeNode> q2 = new LinkedList<>();
q1.add(pRoot);
ArrayList<ArrayList<Integer>> resultList = new ArrayList<ArrayList<Integer>>();
//存放某一层的结点
ArrayList<Integer> tempList;
while(!q1.isEmpty() || !q2.isEmpty()){
if(layer%2 != 0){
/*奇数层*/
tempList = new ArrayList<>();
while(!q1.isEmpty()){
//取出第一个TreeNode
TreeNode node = q1.poll();
if(node != null){
tempList.add(node.val);
//node的子节点都是偶数层
q2.add(node.left);
q2.add(node.right);
}
}
//将该层的值全部存入到resulList中
if(!tempList.isEmpty()){
resultList.add(tempList);
}
}else{
/*偶数层*/
tempList = new ArrayList<>();
while(!q2.isEmpty()){
//取出第一个TreeNode
TreeNode node = q2.poll();
if(node != null){
tempList.add(node.val);
//node的子结点都是奇数层
q1.add(node.left);
q1.add(node.right);
}
}
//将该层的值全部存入到resulList中
if(!tempList.isEmpty()){
resultList.add(tempList);
}
}
layer++;
}
return resultList;
}
}
解题思路2:
import java.util.ArrayList;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
if(pRoot == null){
return null;
}
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
method(list, 1, pRoot);
return list;
}
//从上到下按层从左至右打印二叉树
public void method(ArrayList<ArrayList<Integer>> list, int deep, TreeNode pRoot){
if(pRoot == null){
return;
}
if(deep > list.size()){
list.add(new ArrayList<Integer>());
}
list.get(deep -1).add(pRoot.val);
method(list, deep + 1, pRoot.left);
method(list, deep + 1, pRoot.right);
}
}