题目来源
429. N叉树的层序遍历
题目描述
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 >> levelOrder ( Node* root) {
vector< vector< int >> vec;
if ( root == NULL ) {
return vec;
}
std:: queue< Node * > queue;
queue. push ( root) ;
while ( ! queue. empty ( ) ) {
int size = queue. size ( ) ;
vector< int > tmp ( size, 0 ) ;
for ( int i = 0 ; i < size; ++ i) {
Node * node = queue. front ( ) ;
queue. pop ( ) ;
tmp[ i] = node-> val;
for ( auto child : node-> children) {
queue. push ( child) ;
}
}
vec. push_back ( tmp) ;
}
return vec;
}
递归
class Solution {
vector< vector< int >> ans;
void helper ( Node* root, int onelevel) {
if ( root == nullptr ) {
return ;
}
if ( ans. size ( ) == onelevel) {
ans. emplace_back ( ) ;
}
ans[ onelevel] . push_back ( root-> val) ;
for ( auto c : root-> children) {
helper ( c, onelevel + 1 ) ;
}
}
public :
vector< vector< int >> levelOrder ( Node* root) {
helper ( root, 0 ) ;
return ans;
}
} ;