leetcode3: binary tree level order traversal.
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,#,#,15,7},
3
/ \
9 20
/ \
15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int> > levelOrder(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
queue<TreeNode*> * cur_queue, * next_queue;
cur_queue = new queue<TreeNode* >();
next_queue = new queue<TreeNode* >();
cur_queue->push(root);
vector< vector<int> > rel;
if(!root) return rel;
vector<int> temp;
while(! cur_queue->empty() ) {
TreeNode * tmp = cur_queue->front();
if( tmp->left ) {
next_queue->push( tmp->left);
}
if(tmp->right) {
next_queue->push( tmp->right);
}
temp.push_back( tmp->val );
cur_queue->pop();
if( cur_queue->empty()) {
rel.push_back( temp );
temp.clear();
swap(cur_queue, next_queue);
}
}
delete cur_queue, next_queue;
return rel;
}
};/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
// Start typing your Java solution below
// DO NOT write main() function
ArrayList<ArrayList<Integer> > rel = new ArrayList<ArrayList<Integer>>();
if( root==null) return rel;
Queue<TreeNode> q1 = new LinkedList<TreeNode>();
Queue<TreeNode> q2 = new LinkedList<TreeNode>();
q1.add(root);
TreeNode tn;
ArrayList<Integer> ta = new ArrayList<Integer>();
while(q1.peek()!=null) {
tn = q1.remove();
ta.add(tn.val);
if(tn.left!=null) q2.add(tn.left);
if(tn.right!=null) q2.add(tn.right);
if(q1.peek()==null) {
rel.add(ta);
ta = new ArrayList<Integer>(); //wrong ta.clear(). it actually clear the content in heap. so element in container is also cleaned up.
Queue<TreeNode> qTemp = q1;
q1 = q2;
q2 = qTemp;
}
}
return rel;
}
}
with only one queue. we use 2 integer to track the number of nodes in every level.
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
// null, {1}, {1,2,3}, {1, #, 3, 4}
public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
// Start typing your Java solution below
// DO NOT write main() function
//input check;
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
if(root==null) return res;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer( root );
int first = 1;
int second = 0;
ArrayList<Integer> level = new ArrayList<Integer>();
while(!queue.isEmpty() ) {
TreeNode x = queue.poll();
--first;
level.add(x.val);
if(x.left!=null) {
queue.offer(x.left);
++second;
}
if(x.right!=null){
queue.offer(x.right);
++second;
}
if(first==0) {
res.add( level);
level = new ArrayList<Integer>();
first = second;
second = 0;
}
}
return res;
}
}
浙公网安备 33010602011771号