Factor Tree는 숫자의 요인을 이해하는 직관적인 방법입니다. 모든 요소가 숫자에서 어떻게 파생되었는지 보여줍니다. 이는 더 이상 인수분해할 수 없을 때까지 숫자의 인수를 찾은 다음 해당 숫자의 인수 등을 찾는 특수 다이어그램입니다. 끝은 모두 원래 숫자의 소인수입니다.
예:
Input : v = 48 Output : Root of below tree 48 / 2 24 / 2 12 / 2 6 / 2 3
요인 트리는 재귀적으로 생성됩니다. 이진 트리가 사용됩니다.
- 우리는 숫자로 시작하여 가능한 최소 제수를 찾습니다.
- 그런 다음 상위 숫자를 최소 제수로 나눕니다.
- 우리는 제수와 몫을 모두 상위 숫자의 두 하위 항목으로 저장합니다.
- 두 하위 항목 모두 재귀적으로 기능하도록 전송됩니다.
- 숫자의 절반보다 작은 제수가 발견되지 않으면 두 하위 항목은 NULL로 저장됩니다.
구현:
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
시간 복잡도: O(n) 여기서 n은 주어진 숫자입니다.
공간 복잡도: O(k) 여기서 k는 숫자의 인수입니다.
퀴즈 만들기