对于二叉树的问题,采用队列方式实现的模板代码
以剑指offerII 045. 二叉树最底层最左边的值为例子:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int findBottomLeftValue(TreeNode* root) {
queue<TreeNode*> tree;//模板语句1
tree.push(root);//模板语句2
vector<int> row;
while(!tree.empty()){
row.clear();
for(int i = tree.size();i>0;i--){//模板语句3
TreeNode* tmp = tree.front();//模板语句4
row.emplace_back(tmp->val);
if(tmp->left!=nullptr) tree.push(tmp->left);//模板语句5
if(tmp->right!=nullptr) tree.push(tmp->right);//模板语句6
tree.pop();//模板语句7
}
}
return row[0];
}
};
这主要是针对二叉树的问题,我们采用层序遍历的方式实现相应题目要求。
需要注意的问题:
- 考虑root为空的情况;
- 考虑队列为空的情况;
- 树每层的个数可以用队列queue.size()来表示,由于每次根节点都出队列,所以队列中存放的始终是某行的元素。