【题目】
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
来源:leetcode
链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/
【示例】
给定二叉树: [3,9,20,null,null,15,7]
输出:3,9,20,15,7
【提示】
节点总数 <= 1000
【代码】queue实现的层次遍历
执行用时 :4 ms, 在所有 C++ 提交中击败了89.64% 的用户
内存消耗 :12.8 MB, 在所有 C++ 提交中击败了100.00%的用户
/**
* 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)
return {};
queue<TreeNode*> q;
vector<vector<int>> vv;
q.push(root);
while(!q.empty()){
vector<int> v;
int qsize=q.size();
for(int i=0;i<qsize;i++){
TreeNode*node=q.front();
if(node->left)
q.push(node->left);
if(node->right)
q.push(node->right);
q.pop();
v.push_back(node->val);
}
vv.push_back(v);
}
return vv;
}
};
【实现二】性能与上面一个一样,用queue作为辅助,设置end节点
执行用时 :4 ms, 在所有 C++ 提交中击败了89.60% 的用户
内存消耗 :12.6 MB, 在所有 C++ 提交中击败了100.00%的用户
/**
* 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)
return {};
queue<TreeNode*> q;
vector<vector<int>> vv;
q.push(root);
TreeNode*end=root;
vector<int> v;
while(!q.empty()){
TreeNode*node=q.front();
if(node->left)
q.push(node->left);
if(node->right)
q.push(node->right);
v.push_back(node->val);
q.pop();
if(node==end){
end=q.back();
vv.push_back(v);
v.clear();
}
}
return vv;
}
};