从上到下打印二叉树
题目:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7],
返回:
[3,9,20,15,7]
提示:
节点总数 <= 1000
解题思路
题目要求我们按照层次遍历来打印二叉树,因此我们可以借助队列(先进先出)来满足要求。
算法流程:
- 判断根节点是否为空,若为空直接返回空
- 若不为空将根节点插入到队尾
- 以队列是否为空作为循环条件,若队列不为空进入循环;
将队头元素的值插入到vector容器中,然后删除队头元素;
若左子节点不为空,则将其插入队尾;
若右子节点不为空,则将其插入队尾。 - 当队列为空时退出循环,并返回vector容器
代码展示
代码如下:
class Solution {
public:
vector<int> levelOrder(TreeNode* root) {
//若根节点为空,返回空
if(root==NULL) return vector<int>();
vector<int> v;
queue<TreeNode*> q;
//将根节点插入队尾
q.push(root);
while(!q.empty())
{
TreeNode* tem=q.front();
//将对头节点的值插入vector容器
v.push_back(tem->val);
//删除队头元素
q.pop();
//若左子节点不为空,则将其插入队尾
if(tem->left) q.push(tem->left);
//若右子节点不为空,则将其插入队尾
if(tem->right) q.push(tem->right);
}
return v;
}
};
执行用时:4 ms, 在所有 C++ 提交中击败了89.13%的用户
内存消耗:11.9 MB, 在所有 C++ 提交中击败了89.64%的用户