其他分享
首页 > 其他分享> > Leetcode-day1-429. N 叉树的层序遍历

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