问题描述
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.
* 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) {
if (root == NULL)
return vector<vector<int>>();
queue<TreeNode*> cur;
queue<TreeNode*> next;
cur.push(root);
vector<vector<int>> result;
vector<int> tmp;
while(!cur.empty() || !next.empty()) {
if (!cur.empty()) {
tmp.push_back(cur.front()->val);
if (cur.front()->left != NULL)
next.push(cur.front()->left);
if (cur.front()->right != NULL)
next.push(cur.front()->right);
cur.pop();
} else {
cur = next;
next = queue<TreeNode*>();
result.push_back(tmp);
tmp = vector<int>();
}
}
result.push_back(tmp);
return result;
}
};