logo

عمق شجرة N-Ary

نظرا ل شجرة ن آري تحتوي على قيم عقدة موجبة وتتمثل المهمة في العثور على عمق من الشجرة.
ملحوظة: ان شجرة ن آري هي شجرة حيث يمكن أن يكون لكل عقدة صفر أو أكثر عقد الأطفال. على عكس الشجرة الثنائية التي تحتوي على طفلين على الأكثر لكل عقدة (اليسار واليمين) تسمح شجرة n-ary بذلك فروع متعددة أو الأطفال لكل عقدة.

أمثلة:

مدخل:



ثاني أكبر عنصر في شجرة n-ary-2' title=

الإخراج: 3
توضيح: أطول مسار من الجذر (العقدة 81) إلى الورقة هو إما 81 -> 26 -> 95 أو 81 -> 26 -> 86 مما يعطي أقصى عمق 3.

مدخل:

الحد الأدنى من العملية لجعل كل عقدة ورقة متساوية 2' loading='lazy' title=

الإخراج: 2
توضيح: أطول مسار من الجذر (العقدة 4) إلى أي ورقة (العقد 5 أو 7) هو 2 لأنه يتطلب مستويين فقط من الاجتياز.

المعلمة في البرنامج النصي شل

يقترب:

الفكرة هي حساب عمق شجرة N-ary بشكل متكرر تهيئة أقصى عمق كـ 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

تعقيد الوقت: O(n) حيث تتم زيارة كل عقدة مرة واحدة حيث n هو إجمالي عدد العقد في شجرة N-ary.
المساحة المساعدة: O(h) حيث h هو ارتفاع الشجرة بسبب استخدام مكدس الاستدعاءات المتكرر.

إنشاء اختبار