N-Ary ツリーの深さ

N-Ary ツリーの深さ

与えられた n分木 正のノード値を含むタスクは、 深さ 木の。
注記: アン n分木 各ノードが持つことができるツリーです。 ゼロ または もっと 子ノード。ノードごとに最大 2 つの子を持つバイナリ ツリーとは異なります。 (左右) n 分木では次のことが可能になります。 複数の支店 または各ノードの子。

例:

入力:

n 項ツリー 2 で 2 番目に大きい要素

出力: 3
説明: ルート (ノード 81) からリーフまでの最長パスは 81 -> 26 -> 95 または 81 -> 26 -> 86 で、最大深さは 3 になります。

入力:

すべてのリーフノードを 2 と等しくするための最小操作

出力: 2
説明: ルート (ノード 4) から任意のリーフ (ノード 5 または 7) までの最長パスは、2 レベルの走査のみが必要なため、2 になります。

アプローチ:

アイデアは、次のように計算することです。 N分木の深さ 再帰的に を初期化します 最大深度 0 として再帰的に計算します。 深さ それぞれの子供たちに合わせて記録し、 最高の深さ 遭遇した。最後に追加します 1 (現在のノードの) 最大深度まで設定し、 結果 。このアプローチにより、確実に 最長のパス ルートから任意のリーフノードまで。

N-Ary ツリーは、通常のツリーと同様にトラバースできます。特定のノードのすべての子を考慮し、すべてのノードでその関数を再帰的に呼び出す必要があります。 

C++
   // C++ Code to find the depth of an N-ary tree   #include          using     namespace     std  ;   class     Node     {   public  :      int     data  ;      vector   <  Node  *>     children  ;      Node  (  int     val  )     {      data     =     val  ;      }   };   // Recursive function to calculate maximum depth   int     maxDepth  (  Node  *     root  )     {          // If the node is null depth is 0      if     (  !  root  )     {      return     0  ;      }      int     depth     =     0  ;      // Recur for all children and find the maximum depth      for     (  auto     child     :     root  ->  children  )     {      depth     =     max  (  depth       maxDepth  (  child  ));      }      // Add 1 to include the current node      // in the depth count      return     depth     +     1  ;   }   int     main  ()     {      // Representation of given N-ary tree      // 1      // / |     // 2 3 4      // /     // 5 6      Node  *     root     =     new     Node  (  1  );      root  ->  children  .  push_back  (  new     Node  (  2  ));      root  ->  children  .  push_back  (  new     Node  (  3  ));      root  ->  children  .  push_back  (  new     Node  (  4  ));      root  ->  children  [  0  ]  ->  children  .  push_back  (  new     Node  (  5  ));      root  ->  children  [  2  ]  ->  children  .  push_back  (  new     Node  (  6  ));      cout      < <     maxDepth  (  root  );      return     0  ;   }   
Java
   // Java Code to find the depth of an N-ary tree   import     java.util.*  ;   class   Node     {      int     data  ;      List   <  Node  >     children  ;      Node  (  int     val  )     {      data     =     val  ;      children     =     new     ArrayList   <>  ();      }   }   // Recursive function to calculate   // maximum depth   class   GfG     {          static     int     maxDepth  (  Node     root  )     {      // If the node is null depth is 0      if     (  root     ==     null  )     {      return     0  ;      }      int     depth     =     0  ;      // Recur for all children and find      // the maximum depth      for     (  Node     child     :     root  .  children  )     {      depth     =     Math  .  max  (  depth       maxDepth  (  child  ));      }      // Add 1 to include the current node       // in the depth count      return     depth     +     1  ;      }      public     static     void     main  (  String  []     args  )     {      // Representation of given N-ary tree      // 1      // / |       // 2 3 4      // /       // 5 6      Node     root     =     new     Node  (  1  );      root  .  children  .  add  (  new     Node  (  2  ));      root  .  children  .  add  (  new     Node  (  3  ));      root  .  children  .  add  (  new     Node  (  4  ));      root  .  children  .  get  (  0  ).  children  .  add  (  new     Node  (  5  ));      root  .  children  .  get  (  2  ).  children  .  add  (  new     Node  (  6  ));      System  .  out  .  println  (  maxDepth  (  root  ));      }   }   
Python
   # Python Code to find the depth    # of an N-ary tree   class   Node  :   def   __init__  (  self     val  ):   self  .  data   =   val   self  .  children   =   []   # Recursive function to calculate   # maximum depth   def   max_depth  (  root  ):   # If the node is None depth is 0   if   not   root  :   return   0   depth   =   0   # Recur for all children and    # find the maximum depth   for   child   in   root  .  children  :   depth   =   max  (  depth     max_depth  (  child  ))   # Add 1 to include the current   # node in the depth count   return   depth   +   1   if   __name__   ==   '__main__'  :   # Representation of given N-ary tree   # 1   # / |    # 2 3 4   # /    # 5 6   root   =   Node  (  1  )   root  .  children  .  append  (  Node  (  2  ))   root  .  children  .  append  (  Node  (  3  ))   root  .  children  .  append  (  Node  (  4  ))   root  .  children  [  0  ]  .  children  .  append  (  Node  (  5  ))   root  .  children  [  2  ]  .  children  .  append  (  Node  (  6  ))   print  (  max_depth  (  root  ))   
C#
   // C# Code to find the depth of an N-ary tree   using     System  ;   using     System.Collections.Generic  ;   class     Node     {      public     int     data  ;      public     List   <  Node  >     children  ;      public     Node  (  int     val  )     {      data     =     val  ;      children     =     new     List   <  Node  >  ();      }   }   // Recursive function to calculate   // maximum depth   class     GfG     {          static     int     MaxDepth  (  Node     root  )     {      // If the node is null depth is 0      if     (  root     ==     null  )     {      return     0  ;      }      int     depth     =     0  ;      // Recur for all children and find the maximum depth      foreach     (  Node     child     in     root  .  children  )     {      depth     =     Math  .  Max  (  depth       MaxDepth  (  child  ));      }      // Add 1 to include the current      // node in the depth count      return     depth     +     1  ;      }      static     void     Main  (  string  []     args  )     {      // Representation of given N-ary tree      // 1      // / |       // 2 3 4      // /       // 5 6      Node     root     =     new     Node  (  1  );      root  .  children  .  Add  (  new     Node  (  2  ));      root  .  children  .  Add  (  new     Node  (  3  ));      root  .  children  .  Add  (  new     Node  (  4  ));      root  .  children  [  0  ].  children  .  Add  (  new     Node  (  5  ));      root  .  children  [  2  ].  children  .  Add  (  new     Node  (  6  ));      Console  .  WriteLine  (  MaxDepth  (  root  ));      }   }   
JavaScript
   // JavaScript Code to find the depth    // of an N-ary tree   class     Node     {      constructor  (  val  )     {      this  .  data     =     val  ;      this  .  children     =     [];      }   }   // Recursive function to calculate    // maximum depth   function     maxDepth  (  root  )     {      // If the node is null depth is 0      if     (  !  root  )     {      return     0  ;      }      let     depth     =     0  ;      // Recur for all children and find      // the maximum depth      for     (  let     child     of     root  .  children  )     {      depth     =     Math  .  max  (  depth       maxDepth  (  child  ));      }      // Add 1 to include the current node       // in the depth count      return     depth     +     1  ;   }   // Representation of given N-ary tree   // 1   // / |    // 2 3 4   // /    // 5 6   const     root     =     new     Node  (  1  );   root  .  children  .  push  (  new     Node  (  2  ));   root  .  children  .  push  (  new     Node  (  3  ));   root  .  children  .  push  (  new     Node  (  4  ));   root  .  children  [  0  ].  children  .  push  (  new     Node  (  5  ));   root  .  children  [  2  ].  children  .  push  (  new     Node  (  6  ));   console  .  log  (  maxDepth  (  root  ));   

出力
3 

時間計算量: 各ノードが 1 回訪問されるため、O(n) になります。ここで、n は N 分ツリー内のノードの総数です。
補助スペース: O(h) ここで、h は再帰呼び出しスタックの使用によるツリーの高さです。

クイズの作成