102. Binary Tree Level Order Traversal
二叉樹層序遍歷
考察 BFS 的寫法。
層序遍歷,每行從左到右的方向輸出數組元素。
在這道題的基礎上,還可以擴展出其他類型的層序遍歷,例如 Z 字遍歷。
參考 103. Binary Tree Zigzag Level Order Traversal
這道題屬於必須掌握的題。
Description
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]
]
Code
下面直接給出AC的代碼:
/**
* 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 {};
queue<TreeNode*> q;
q.push(root);
vector<vector<int>> ret;
while (!q.empty()) {
int cur_size = q.size();
vector<int> tmp;
for (int i = 0; i < cur_size; i++) {
TreeNode* node = q.front();
q.pop();
tmp.push_back(node->val);
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
ret.push_back(tmp);
}
return ret;
}
};
分析
咳咳,到了該分析算法的部分了。
空間複雜度[1]:
因爲所有節點都必須被存儲,因此BFS的空間複雜度 O(V+E),其中 V 是節點的數目,而E是邊的數目。
時間複雜度:
當利用BFS搜索時,最壞的情況下要遍歷整棵樹。本題不是搜索,而直接就是輸出整棵樹。因此二者的時間複雜度一樣。O(V+E)。
這部分的複雜度分析,其實我也沒太搞懂,是參考了wiki上的。以後有時間弄明白原理了,再來更新吧
Reference
1.https://zh.wikipedia.org/wiki/%E5%B9%BF%E5%BA%A6%E4%BC%98%E5%85%88%E6%90%9C%E7%B4%A2