I. 从上到下打印二叉树
题目链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof/
这道题考察二叉树的层序遍历,也就是广度优先搜索(BFS),BFS通常借助队列先进先出的特点
基本步骤:
- 特例处理:树的根节点为空时,直接返回空列表
- 将根节点入队,打印结果列表ans
- BFS循环处理:当队列为空时结束循环
1.出队:搞一个指针(tmp)指向队首元素。队首元素出队
2.打印:将val添加至ans
3.添加子节点:若tmp指向的结点的左右子节点不为空,则将左右子节点入队
动图演示:
代码如下:
class Solution {
private:
vector<int> ans;
queue<TreeNode*> q;
public:
vector<int> levelOrder(TreeNode* root) {
if(!root)
return ans;
q.push(root);
while(q.size())
{
TreeNode* tmp = q.front();
ans.push_back(tmp->val);
q.pop();
if(tmp->left)
q.push(tmp->left);
if(tmp->right)
q.push(tmp->right);
}
return ans;
}
};
复杂度:
- 时间复杂度:O(N)
- 空间间复杂度:O(N)
2.从上到下打印二叉树 II
题目链接:https://leetcode-cn.com/problems/cong-shang-dao