倒序 正序
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();//用于返回最后的结果
if(pRoot == null) return res;//如果根节点为空就返回结果
Deque<TreeNode> que = new LinkedList<TreeNode>();//用于存储每一层的节点
que.offer(pRoot);
int layer =0;
while(!que.isEmpty()){
ArrayList<Integer> temp = new ArrayList<>();
int len = que.size();
for(int i=0;i<len;i++){
TreeNode node = que.poll();
if(layer%2==0){
temp.add(node.val);
}else{
temp.add(0,node.val);
}
if(node.left!=null) que.offer(node.left);
if(node.right!=null) que.offer(node.right);
}
layer++;
res.add(temp);
}
return res;
}
}1、add()和offer()区别:
add()和offer()都是向队列中添加一个元素。一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,调用 add() 方法就会抛出一个 unchecked 异常,而调用 offer() 方***返回 false。因此就可以在程序中进行有效的判断!
2.
public class Solution {
public ArrayList<ArrayList<Integer> > Print(TreeNode root) {
ArrayList<ArrayList<Integer>> res = new ArrayList();//用于返回最后的结果
if(root == null) return res;//如果根节点为空就返回结果
LinkedList<TreeNode> q = new LinkedList<TreeNode>();//用于存储每一层的节点
q.add(root);
int count = 0;
while(!q.isEmpty()){
ArrayList<Integer> temp = new ArrayList();
for(int i=q.size(); i>0; i--){
TreeNode node = q.poll();
if(count%2== 0){
temp.add(node.val);
}
else{
temp.add(0,node.val);
}
if(node.left!=null) q.offer(node.left);
if(node.right!=null) q.offer(node.right);
}
count++;
res.add(temp);
}
return res;
}
}


京公网安备 11010502036488号