Факторско стабло датог броја

Факторско стабло је интуитиван метод за разумевање фактора броја. Показује како су сви фактори изведени из броја. То је посебан дијаграм где проналазите факторе броја, затим факторе тих бројева итд. све док више не можете да чините факторе. Крајеви су сви прости чиниоци оригиналног броја.

Пример: 

Input : v = 48 Output : Root of below tree 48 / 2 24 / 2 12 / 2 6 / 2 3 

Факторско стабло се креира рекурзивно. Користи се бинарно дрво. 

  1. Почињемо са бројем и налазимо најмањи могући делилац.
  2. Затим делимо родитељски број са минималним делиоцем.
  3. Чувамо и делилац и количник као два детета родитељског броја.
  4. Оба детета се шаљу у функцију рекурзивно.
  5. Ако се делилац мањи од половине броја не пронађе, два детета се чувају као НУЛЛ.

Имплементација:

C++
   // C++ program to construct Factor Tree for   // a given number   #include       using     namespace     std  ;   // Tree node   struct     Node   {      struct     Node     *  left       *  right  ;      int     key  ;   };   // Utility function to create a new tree Node   Node  *     newNode  (  int     key  )   {      Node  *     temp     =     new     Node  ;      temp  ->  key     =     key  ;      temp  ->  left     =     temp  ->  right     =     NULL  ;      return     temp  ;   }   // Constructs factor tree for given value and stores   // root of tree at given reference.   void     createFactorTree  (  struct     Node     **  node_ref       int     v  )   {      (  *  node_ref  )     =     newNode  (  v  );      // the number is factorized      for     (  int     i     =     2     ;     i      <     v  /  2     ;     i  ++  )      {      if     (  v     %     i     !=     0  )      continue  ;      // If we found a factor we construct left      // and right subtrees and return. Since we      // traverse factors starting from smaller      // to greater left child will always have      // smaller factor      createFactorTree  (  &  ((  *  node_ref  )  ->  left  )     i  );      createFactorTree  (  &  ((  *  node_ref  )  ->  right  )     v  /  i  );      return  ;      }   }   // Iterative method to find the height of Binary Tree   void     printLevelOrder  (  Node     *  root  )   {      // Base Case      if     (  root     ==     NULL  )     return  ;      queue   <  Node     *>     q  ;      q  .  push  (  root  );      while     (  q  .  empty  ()     ==     false  )      {      // Print front of queue and remove      // it from queue      Node     *  node     =     q  .  front  ();      cout      < <     node  ->  key      < <     ' '  ;      q  .  pop  ();      if     (  node  ->  left     !=     NULL  )      q  .  push  (  node  ->  left  );      if     (  node  ->  right     !=     NULL  )      q  .  push  (  node  ->  right  );      }   }   // driver program   int     main  ()   {      int     val     =     48  ;  // sample value      struct     Node     *  root     =     NULL  ;      createFactorTree  (  &  root       val  );      cout      < <     'Level order traversal of '      'constructed factor tree'  ;      printLevelOrder  (  root  );      return     0  ;   }   
Java
   // Java program to construct Factor Tree for   // a given number   import     java.util.*  ;   class   GFG   {      // Tree node      static     class   Node      {      Node     left       right  ;      int     key  ;      };      static     Node     root  ;      // Utility function to create a new tree Node      static     Node     newNode  (  int     key  )      {      Node     temp     =     new     Node  ();      temp  .  key     =     key  ;      temp  .  left     =     temp  .  right     =     null  ;      return     temp  ;      }      // Constructs factor tree for given value and stores      // root of tree at given reference.      static     Node     createFactorTree  (  Node     node_ref       int     v  )      {      (  node_ref  )     =     newNode  (  v  );      // the number is factorized      for     (  int     i     =     2     ;     i      <     v  /  2     ;     i  ++  )      {      if     (  v     %     i     !=     0  )      continue  ;      // If we found a factor we construct left      // and right subtrees and return. Since we      // traverse factors starting from smaller      // to greater left child will always have      // smaller factor      node_ref  .  left     =     createFactorTree  (((  node_ref  ).  left  )     i  );      node_ref  .  right     =     createFactorTree  (((  node_ref  ).  right  )     v  /  i  );      return     node_ref  ;      }      return     node_ref  ;      }      // Iterative method to find the height of Binary Tree      static     void     printLevelOrder  (  Node     root  )      {      // Base Case      if     (  root     ==     null  )     return  ;      Queue   <  Node     >     q     =     new     LinkedList   <>  ();      q  .  add  (  root  );      while     (  q  .  isEmpty  ()     ==     false  )      {      // Print front of queue and remove      // it from queue      Node     node     =     q  .  peek  ();      System  .  out  .  print  (  node  .  key     +     ' '  );      q  .  remove  ();      if     (  node  .  left     !=     null  )      q  .  add  (  node  .  left  );      if     (  node  .  right     !=     null  )      q  .  add  (  node  .  right  );      }      }      // Driver program      public     static     void     main  (  String  []     args  )      {      int     val     =     48  ;  // sample value      root     =     null  ;      root     =     createFactorTree  (  root       val  );      System  .  out  .  println  (  'Level order traversal of '  +      'constructed factor tree'  );      printLevelOrder  (  root  );      }   }   // This code is contributed by Rajput-Ji   
Python3
   # Python program to construct Factor Tree for   # a given number   class   Node  :   def   __init__  (  self     key  ):   self  .  left   =   None   self  .  right   =   None   self  .  key   =   key   # Utility function to create a new tree Node   def   newNode  (  key  ):   temp   =   Node  (  key  )   return   temp   # Constructs factor tree for given value and stores   # root of tree at given reference.   def   createFactorTree  (  node_ref     v  ):   node_ref   =   newNode  (  v  )   # the number is factorized   for   i   in   range  (  2     int  (  v  /  2  )):   if   (  v   %   i   !=   0  ):   continue   # If we found a factor we construct left   # and right subtrees and return. Since we   # traverse factors starting from smaller   # to greater left child will always have   # smaller factor   node_ref  .  left   =   createFactorTree  (((  node_ref  )  .  left  )   i  )   node_ref  .  right   =   createFactorTree  (((  node_ref  )  .  right  )   int  (  v  /  i  ))   return   node_ref   return   node_ref   # Iterative method to find the height of Binary Tree   def   printLevelOrder  (  root  ):   # Base Case   if   (  root   ==   None  ):   return   q   =   [];   q  .  append  (  root  );   while   (  len  (  q  )   >   0  ):   # Print front of queue and remove   # it from queue   node   =   q  [  0  ]   print  (  node  .  key     end   =   ' '  )   q   =   q  [  1  :]   if   (  node  .  left   !=   None  ):   q  .  append  (  node  .  left  )   if   (  node  .  right   !=   None  ):   q  .  append  (  node  .  right  )   val   =   48  # sample value   root   =   None   root   =   createFactorTree  (  root     val  )   print  (  'Level order traversal of constructed factor tree'  )   printLevelOrder  (  root  )   # This code is contributed by shinjanpatra   
C#
   // C# program to construct Factor Tree for   // a given number   using     System  ;   using     System.Collections.Generic  ;   public     class     GFG   {      // Tree node      public      class     Node      {      public      Node     left       right  ;      public      int     key  ;      };      static     Node     root  ;      // Utility function to create a new tree Node      static     Node     newNode  (  int     key  )      {      Node     temp     =     new     Node  ();      temp  .  key     =     key  ;      temp  .  left     =     temp  .  right     =     null  ;      return     temp  ;      }      // Constructs factor tree for given value and stores      // root of tree at given reference.      static     Node     createFactorTree  (  Node     node_ref       int     v  )      {      (  node_ref  )     =     newNode  (  v  );      // the number is factorized      for     (  int     i     =     2     ;     i      <     v  /  2     ;     i  ++  )      {      if     (  v     %     i     !=     0  )      continue  ;      // If we found a factor we construct left      // and right subtrees and return. Since we      // traverse factors starting from smaller      // to greater left child will always have      // smaller factor      node_ref  .  left     =     createFactorTree  (((  node_ref  ).  left  )     i  );      node_ref  .  right     =     createFactorTree  (((  node_ref  ).  right  )     v  /  i  );      return     node_ref  ;      }      return     node_ref  ;      }      // Iterative method to find the height of Binary Tree      static     void     printLevelOrder  (  Node     root  )      {      // Base Case      if     (  root     ==     null  )     return  ;      Queue   <  Node     >     q     =     new     Queue   <  Node  >  ();      q  .  Enqueue  (  root  );      while     (  q  .  Count     !=     0  )      {      // Print front of queue and remove      // it from queue      Node     node     =     q  .  Peek  ();      Console  .  Write  (  node  .  key     +     ' '  );      q  .  Dequeue  ();      if     (  node  .  left     !=     null  )      q  .  Enqueue  (  node  .  left  );      if     (  node  .  right     !=     null  )      q  .  Enqueue  (  node  .  right  );      }      }      // Driver program      public     static     void     Main  (  String  []     args  )      {      int     val     =     48  ;  // sample value      root     =     null  ;      root     =     createFactorTree  (  root       val  );      Console  .  WriteLine  (  'Level order traversal of '  +      'constructed factor tree'  );      printLevelOrder  (  root  );      }   }   // This code is contributed by gauravrajput1   
JavaScript
    <  script  >      // Javascript program to construct Factor Tree for      // a given number          class     Node      {      constructor  (  key  )     {      this  .  left     =     null  ;      this  .  right     =     null  ;      this  .  key     =     key  ;      }      }          let     root  ;          // Utility function to create a new tree Node      function     newNode  (  key  )      {      let     temp     =     new     Node  (  key  );      return     temp  ;      }      // Constructs factor tree for given value and stores      // root of tree at given reference.      function     createFactorTree  (  node_ref       v  )      {      (  node_ref  )     =     newNode  (  v  );      // the number is factorized      for     (  let     i     =     2     ;     i      <     parseInt  (  v  /  2       10  )     ;     i  ++  )      {      if     (  v     %     i     !=     0  )      continue  ;      // If we found a factor we construct left      // and right subtrees and return. Since we      // traverse factors starting from smaller      // to greater left child will always have      // smaller factor      node_ref  .  left     =     createFactorTree  (((  node_ref  ).  left  )     i  );      node_ref  .  right     =     createFactorTree  (((  node_ref  ).  right  )     parseInt  (  v  /  i       10  ));      return     node_ref  ;      }      return     node_ref  ;      }      // Iterative method to find the height of Binary Tree      function     printLevelOrder  (  root  )      {      // Base Case      if     (  root     ==     null  )     return  ;      let     q     =     [];      q  .  push  (  root  );      while     (  q  .  length     >     0  )      {      // Print front of queue and remove      // it from queue      let     node     =     q  [  0  ];      document  .  write  (  node  .  key     +     ' '  );      q  .  shift  ();      if     (  node  .  left     !=     null  )      q  .  push  (  node  .  left  );      if     (  node  .  right     !=     null  )      q  .  push  (  node  .  right  );      }      }          let     val     =     48  ;  // sample value      root     =     null  ;      root     =     createFactorTree  (  root       val  );      document  .  write  (  'Level order traversal of '  +      'constructed factor tree'     +     ' 
'
); printLevelOrder ( root ); // This code is contributed by suresh07. < /script>

Излаз
Level order traversal of constructed factor tree48 2 24 2 12 2 6 2 3  

Временска сложеност: О(н) где је н дати број.

Сложеност простора: О(к) где је к фактор броја.

 

Креирај квиз

Можда Ће Вам Се Свидети