您的位置:首页 > 其它

LeetCode.102(107) Binary Tree Level Order Traversal I&II

2017-12-24 13:55 429 查看
题目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;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: