letecode [429] - N進ツリー上位のオーダートラバーサル

N進ツリーが与えられると、そのノードの値のレベル順トラバーサルを返します。(すなわち、左から右、レベルごとに)。

例えば、与えられた  3-ary ツリーを:

 

 

私たちは、そのレベル順トラバーサルを返す必要があります:


     [1]、
     [3,2,4]、
     [5,6] 
]

注意:

  1. ツリーの深さは最大です  1000
  2. ノードの総数は最大です  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パーセントを破っ++

おすすめ

転載: www.cnblogs.com/lpomeloz/p/11084180.html