題目描述:
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
Given binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]
Challenge 1: Using only 1 queue to implement it.
Challenge 2: Use DFS algorithm to do it.
這題比#70更直接,用BFS之後直接輸出ans就行。
Mycode(AC = 14ms):
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
/**
* @param root: The root of binary tree.
* @return: Level order a list of lists of integer
*/
public:
vector<vector<int>> levelOrder(TreeNode *root) {
// write your code here
vector<vector<int>> ans;
if (root == NULL) return ans;
// initialize 2 queues, one to
// store tree nodes, one to store
// level/height of corresponding node
queue<TreeNode *> helper;
helper.push(root);
queue<int> levels;
levels.push(0);
while (!helper.empty()) {
TreeNode *node = helper.front();
helper.pop();
int level = levels.front();
levels.pop();
// push the node into ans, according
// to its level
if (ans.size() <= level) {
ans.push_back({node->val});
}
else {
ans[level].push_back(node->val);
}
// push the left/right tree and their
// corresponding level into queue
if (node->left) {
helper.push(node->left);
levels.push(level + 1);
}
if (node->right) {
helper.push(node->right);
levels.push(level + 1);
}
}
return ans;
}
};