题目描述:
I-从上到下打印二叉树
思路:三道题都是二叉树的层序遍历。第一题很简单,第二题需要额外记录每层,可以用双队列或者标记节点或者记录每层节点个数。第三题在第二题的基础上在适当层数先翻转序列之后添加,或者用双端队列.
第一题:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int[] levelOrder(TreeNode root) {
if(root==null) return new int[0];
Queue<TreeNode> queue=new LinkedList();
List<Integer>list=new ArrayList();
queue.add(root);
while(!queue.isEmpty()){
TreeNode tem=queue.remove();
if(tem.left!=null)queue.add(tem.left);
if(tem.right!=null)queue.add(tem.right);
list.add(tem.val);
}
int [] result=new int[list.size()];
for(int i=0;i<result.length;i++){
result[i]=list.get(i);
}
return result;
}
}
第二题:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result=new ArrayList();
Queue<TreeNode> queue=new LinkedList();
if(root!=null) queue.add(root);
while(!queue.isEmpty()){
List<Integer> list=new ArrayList();
for(int i=queue.size();i>0;i--){
TreeNode tem=queue.remove();
list.add(tem.val);
if(tem.left!=null) queue.add(tem.left);
if(tem.right!=null) queue.add(tem.right);
}
result.add(list);
}
return result;
}
}
第三题:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result=new ArrayList();
Queue<TreeNode> queue=new LinkedList();
boolean flag=false;
if(root!=null) queue.add(root);
while(!queue.isEmpty()){
List<Integer> list=new ArrayList();
for(int i=queue.size();i>0;i--){
TreeNode tem=queue.remove();
list.add(tem.val);
if(tem.left!=null) queue.add(tem.left);
if(tem.right!=null) queue.add(tem.right);
}
if(flag)Collections.reverse(list);
flag=!flag;
result.add(list);
}
return result;
}
}