102. Binary Tree Level Order Traversal
Medium
215858Add to ListShare
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] ]
设置List,一边遍历所有节点一边将List中的每个节点的左右子节点加入List,这样的操作需要两个List:
/**
* 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>> res=new ArrayList<>();
if(root==null){return res;}
List<TreeNode>waitlist=new ArrayList<>();
List<Integer> level=new ArrayList<>();
waitlist.add(root);
while(!waitlist.isEmpty()){
List<TreeNode>temp=new ArrayList<>(waitlist);
waitlist.clear();
for(int i=0;i<temp.size();i++){
TreeNode tempnode=temp.get(i);
level.add(tempnode.val);
if(tempnode.left!=null) waitlist.add(tempnode.left);
if(tempnode.right!=null) waitlist.add(tempnode.right);
}
temp.clear();
res.add(new ArrayList<>(level));
level.clear();
}
return res;
}
}
速度满快1ms,但是我想起来可以用一个queue代替两个List实现要求,代码:
/**
* 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>> res=new ArrayList<>();
if(root==null){return res;}
Queue<TreeNode>waitq=new LinkedList<>();
List<Integer> level=new ArrayList<>();
waitq.add(root);
while(!waitq.isEmpty()){
int size=waitq.size();
for(int i=0;i<size;i++){
TreeNode tempnode=waitq.poll();
level.add(tempnode.val);
if(tempnode.left!=null) waitq.add(tempnode.left);
if(tempnode.right!=null) waitq.add(tempnode.right);
}
res.add(new ArrayList<>(level));
level.clear();
}
return res;
}
}