算法
BFS(O(n)
)
依旧是宽度优先遍历,相比不分行从上到下打印,只需要记住这一层需要弹出队列多少次数即可,对应代码里面的n
。
1. 当队列不为空时
2. 记录下当前队列的长度n
,这个长度对应树的当前层有多少个节点
3. OK,相比较上一题,这次在一个循环里面,只弹出n
个节点就好了。弹出过程中存储当前节点到temp
数组
4. 弹出n
个节点之后,将temp
数组存入result
时间复杂度
每个节点遍历1遍,O(N)复杂度
class Solution {
public:
vector<vector<int>> printFromTopToBottom(TreeNode* root) {
vector<vector<int>> result;
if(!root) return result;
queue<TreeNode*> Q;
Q.push(root);
while(!Q.empty()){
vector<int> temp;
for(int i=0, n=Q.size();i<n;i++){
TreeNode *node = Q.front();
Q.pop();
temp.push_back(node->val);
if(node->left) Q.push(node->left);
if(node->right) Q.push(node->right);
}
result.push_back(temp);
}
return result;
}
};
我之前看过类似的题 就是你这种做法 找到了!hh