算法1
(BFS) $O(n)$
在上一道题 《不分行从上往下打印二叉树》 的基础上修改代码。
区别在于,每一层结束的时候,往queue里塞一个NULL做标记。
在queue里读取一个数出来之后,先看看是不是level标识符NULL(因为是BFS,当前level读完,下一个level有哪些要读的也都放在queue里了,可以在queue结尾给加一个新的NULL), 是的话再看看是不是整个树读完了(即queue里没有点了)。
时间复杂度分析:每个点遍历一次
C++ 代码
/**
* 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>> printFromTopToBottom(TreeNode* root) {
vector<vector<int>> res;
if(!root) return res;
queue<TreeNode*> q;
q.push(root);
q.push(NULL); //root层的标识符
vector<int> cur;
while(q.size()){
TreeNode* t = q.front();
q.pop();
if(t){ //跟上一道题同样的操作
cur.push_back(t->val);
if(t->left) q.push(t->left);
if(t->right) q.push(t->right);
}
else{
if(q.size()) q.push(NULL);
res.push_back(cur);
cur.clear();
}
}
return res;
}
};
其实每一次while存的都是一行的结点 每次只取该行结点就可以了
强
这个时间复杂也是O(N)吗
我天,我的代码居然几乎一毛一样!
我的代码:
miao
妙!
妙啊
妙啊
🐮
点赞数这么多我就知道不一般
很棒
niu
思路很好理解hhh