Leetcode-day1-429. N 叉树的层序遍历
作者:互联网
用到的基础知识
C++:
1. 模板类vector类似于string类,也是一种动态数组。它是使用new创建动态数组的替代品。实际上,vector确实使用new和delete来管理内存。
2. 如何定义一个vector?
vector<typeName> vt(n_elem); //创建了一个名为vt的vector对象,它可存储n_elem个类型为typeName的元素,其中n_elem可以是整形常量,也可以是整形变量。
3. 将元素添加到容器结尾
res.push_back(out);
4. erase():删除矢量中给定区间的元素。它接收两个迭代器参数,这些参数定义了要删除的区间。
res.erase(res.begin(),res.begin()+2)
5. 用vector定义一个二维数组
vector<vector<int>> res; //定义了一个二维数组
注意的点:
1.要使用vector对象,必须包含头文件vector
2.vector包含在名称空间std中,因此可以使用using namespace std来使用vector
算法思想:
首先将根节点入队,并清空数组,计算队列长度,遍历该队列,将队内元素出队插入数组,并将其孩子节点入队,返回数组元素,循环直至队列为空。
1 /* 2 // Definition for a Node. 3 class Node { 4 public: 5 int val; 6 vector<Node*> children; 7 8 Node() {} 9 10 Node(int _val) { 11 val = _val; 12 } 13 14 Node(int _val, vector<Node*> _children) { 15 val = _val; 16 children = _children; 17 } 18 }; 19 */ 20 21 class Solution { 22 private: 23 vector<vector<int> > res; //定义了一个二维数组 24 vector<int> small_res; //定义了一个一维数组 25 queue<Node*> que; //定义了一个队列 26 public: 27 vector<vector<int>> levelOrder(Node* root) { 28 if(!root) return res; //如果是一棵空树,则返回数组 29 que.push(root); //否则将根节点入队 30 while(!que.empty()){ //判断队列是否为空,若为空则返回1,否则返回0 队列不空则进入循环 31 small_res.erase(small_res.begin(),small_res.end()); //删除small_res中的所有元素 32 int s=que.size(); //计算队列的长度(即队列中的元素个数) 33 for(int i=0;i<s;i++){ //遍历队列 34 Node *temp=que.front(); //定义一个临时指针,指向队头 35 que.pop(); //元素出队 36 small_res.push_back(temp->val); //将出队元素的值插入数组中 37 if(!temp->children.empty()){ //如果该节点的孩子节点非空 38 for(Node* child:temp->children){ //遍历孩子节点 39 que.push(child); //将孩子节点入队 40 } 41 } 42 } 43 res.push_back(small_res); //将一维数组插入二维数组 44 } 45 return res; //返回结果数组 46 } 47 };
标签:Node,val,res,层序,children,429,vector,数组,Leetcode 来源: https://www.cnblogs.com/ZR222/p/16116033.html