题目102:
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]分析:
/**
* 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>> list=new ArrayList<>();
if(root==null) return list;
backtrace(list,root,0);
return list;
}
//递归实现
public void backtrace(List<List<Integer>> list,TreeNode root,int depth){
if(root==null) return ;
if(depth==list.size()){
//创建子集合
list.add(new ArrayList<>());
}
//递归实现
backtrace(list,root.left,depth+1);
list.get(depth).add(root.val);
backtrace(list,root.right,depth+1);
}
}
题目107:
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3] ]分析:
/**
* 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>> levelOrderBottom(TreeNode root) {
//给定二叉树,对于每层元素层序遍历。最后结果从底层输出
List<List<Integer>> list=new ArrayList<>();
if(root==null) return list;
Queue<TreeNode> queueOdd=new LinkedList<>();
Queue<TreeNode> queueEven=new LinkedList<>();
queueOdd.offer(root);
int count=1;
while(!queueOdd.isEmpty()||!queueEven.isEmpty()){
List<Integer> subList=new ArrayList<>();
TreeNode temp=new TreeNode(0);
while(count%2==1&&!queueOdd.isEmpty()){
//奇数层
temp=queueOdd.poll();
subList.add(temp.val);
if(temp.left!=null){
queueEven.offer(temp.left);
}
if(temp.right!=null){
queueEven.offer(temp.right);
}
}
while(count%2==0&&!queueEven.isEmpty()){
//奇数层
temp=queueEven.poll();
subList.add(temp.val);
if(temp.left!=null){
queueOdd.offer(temp.left);
}
if(temp.right!=null){
queueOdd.offer(temp.right);
}
}
list.add(0,subList);
count++;
}
return list;
}
}