制作网站404页面西安小程序开发的公司
102.二叉树的层序遍历
给你二叉树的根节点 root
,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1] 输出:[[1]]
思路详解:用队列来操作本题,先记录每层有多少个数字,循环队列每层数字个数,弹出对手元素并将子节点入队直到队列中没有元素为止
代码详解:
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> ans;//定义一个存储结果集的数组if(!root) return ans;//如果根节点为空直接返回结果集queue<TreeNode*> que;//用队列来进行操作que.push(root);//先将根节点入队while(!que.empty())//如果队不为空就循环{int index=que.size();//首先记录队列中的元素个数,本操作将记录每层的元素个数vector<int> cur;//定义存储每层结果的结果集while(index--)//每次循环当前层次元素个数次,将其录入到每层结果的结果集{TreeNode*node=que.front();//记录队头元素que.pop();//弹出cur.push_back(node->val);//将队头元素存储到子结果集中if(node->left)que.push(node->left);//将当前节点的左右节点入队if(node->right)que.push(node->right);}ans.push_back(cur);//将每一个子结果集存储到最终结果中}return ans;}};
面经:
1. 什么是c++的函数对象,有什么特点
函数对象,也被称为仿函数,是一个可以被当作函数来使用的对象。具体来说,函数对象是重载了operator()运算符的类对象,使得它可以像函数一样被调用。
#include <iostream>
class PrintHello {
public:void operator()(const string& name) {cout << "Hello, " << name << "!" << endl;}};int main() {PrintHello ph;ph("World"); // 调用函数对象,像调用函数一样return 0;}
- 行为像函数:通过重载operator(),函数对象可以拥有类似函数调用的语法。
- 与普通函数不同,函数对象可以拥有成员变量,从而保持状态。
- 函数对象有自己的类型,可以进行类型检查。
- 由于函数对象是对象,因此可以携带额外的信息或上下文,这是普通函数难以做到的。
2. 数对象和普通函数有啥区别
数对象:数对象是C++中的基本数据类型或者复合数据类型(如枚举、类等)的实例,用于存储数值信息。
普通函数:普通函数是一段可重用的代码,用于执行特定的操作或计算,并可能返回一个结果。
数对象:存储在栈上(除非是动态分配的),其生命周期通常与定义它的作用域相同。
普通函数:函数本身不是对象,它是一段代码,存储在程序的可执行部分。函数的生命周期与程序的生命周期相同。
数对象:C++中的数对象不支持重载,每个变量只能有一个值。
普通函数:可以重载,即可以有多个同名函数,只要它们的参数列表不同。
数对象:C++中的数对象不支持重载,每个变量只能有一个值。
普通函数:可以重载,即可以有多个同名函数,只要它们的参数列表不同。