1. 题⽬链接:429.N叉树的层序遍历
2. 题⽬描述:
3. 解法:
算法思路:
层序遍历即可~仅需多加⼀个变量,⽤来记录每⼀层结点的个数就好了。
C++算法代码:
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val) {
val = _val;
}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
class Solution
{
public:
vector<vector<int>> levelOrder(Node* root)
{
vector<vector<int>>answer; //最后返回值
//判断空树的情况
if(root==nullptr)
{
return answer;
}
queue<Node*>temp; //记录一层中需要被访问的节点
temp.push(root);
while(temp.size())
{
//记录一层中该访问的元素个数,防止越界访问
int num=temp.size();
//访问一层的元素
vector<int>t; //记录一层的元素
for(int i=0;i<num;i++)
{
t.push_back(temp.front()->val);
//将访问元素的孩子节点加入访问队列
for(Node* child:temp.front()->children)
{
temp.push(child);
}
//被访问过的节点退出访问队列
temp.pop();
}
answer.push_back(t);
}
return answer;
}
};
Java算法代码:
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution
{
public List<List<Integer>> levelOrder(Node root)
{
List<List<Integer>> ret = new ArrayList<>();
if (root == null) return ret;
Queue<Node> q = new LinkedList<>();
q.add(root);
while (!q.isEmpty())
{
int sz = q.size();
List<Integer> tmp = new ArrayList<>(); // 统计本层的结点信息
for (int i = 0; i < sz; i++)
{
Node t = q.poll();
tmp.add(t.val);
for (Node child : t.children) // 让孩⼦⼊队
{
if (child != null)
q.add(child);
}
}
ret.add(tmp);
}
return ret;
}
}