N進ツリーが与えられると、そのノードの値のレベル順トラバーサルを返します。(すなわち、左から右、レベルごとに)。
例えば、与えられた 3-ary
ツリーを:
私たちは、そのレベル順トラバーサルを返す必要があります:
【 [1]、 [3,2,4]、 [5,6] ]
注意:
- ツリーの深さは最大です
1000
。 - ノードの総数は最大です
5000
。
効果の対象:
N-ツリー、結果によってその出力レベルを考えます。
理解:
レベルトラバース一般的にキューを使用する必要があります。キュートラバーサル層のサイズの各計算の前に、現在の層は、現在のキューの大きさのノードの数です。
コードC ++:
/ * //ノードの定義。 クラスノード{ パブリック: int型のval; ベクトル<ノード*>子供たち。 ノード(){} ノード(INT _val、ベクトル<ノード*> _children){ ヴァル= _val。 子どもたち= _children。 } }。 * / クラスソリューション{ パブリック: ベクトル <ベクトル< INT >> LEVELORDER(ノード* ルート){ ベクトル <ベクトル< INT >> RES。 もし(ルート== NULL) 戻りRES。 int型の <ノード*> currentLaySize、K。 キューQ; q.push(ルート)。 ノード * ノード。 一方、(!q.empty()){ ベクトル < INT > 層。 currentLaySize = q.size()。 一方、(currentLaySize){ ノード = q.front()。 layer.push_back(ノード - > ヴァル) q.pop(); K = 0 。 一方、(K <(ノード- > 子供が).size()){ q.push((ノード - >子供)[K])。 K ++ ; } currentLaySize - 。 } res.push_back(層)。 } 戻りRESと、 } }。
結果:
ときに実行:220ミリ秒は、Cに提出するすべてのユーザーの88.43パーセントを打つ++
メモリ消費量:33.7メガバイトは、Cに提出するすべてのユーザーの72.68パーセントを破っ++