Dado un árbol genérico y un entero x. Encuentre y devuelva el Node con el siguiente elemento más grande en el árbol, es decir, encuentre un Node justo mayor que x. Retorna NULL si no hay ningún Node presente con un valor mayor que x.
Por ejemplo, en el árbol dado
C++
// CPP program to find next larger element // in an n-ary tree. #include <bits/stdc++.h> using namespace std; // Structure of a node of an n-ary tree struct Node { int key; vector<Node*> child; }; // Utility function to create a new tree node Node* newNode(int key) { Node* temp = new Node; temp->key = key; return temp; } void nextLargerElementUtil(Node* root, int x, Node** res) { if (root == NULL) return; // if root is less than res but greater than // x update res if (root->key > x) if (!(*res) || (*res)->key > root->key) *res = root; // Number of children of root int numChildren = root->child.size(); // Recur calling for every child for (int i = 0; i < numChildren; i++) nextLargerElementUtil(root->child[i], x, res); return; } // Function to find next Greater element of x in tree Node* nextLargerElement(Node* root, int x) { // resultant node Node* res = NULL; // calling helper function nextLargerElementUtil(root, x, &res); return res; } // Driver program int main() { /* Let us create below tree * 5 * / | \ * 1 2 3 * / / \ \ * 15 4 5 6 */ Node* root = newNode(5); (root->child).push_back(newNode(1)); (root->child).push_back(newNode(2)); (root->child).push_back(newNode(3)); (root->child[0]->child).push_back(newNode(15)); (root->child[1]->child).push_back(newNode(4)); (root->child[1]->child).push_back(newNode(5)); (root->child[2]->child).push_back(newNode(6)); int x = 5; cout << "Next larger element of " << x << " is "; cout << nextLargerElement(root, x)->key << endl; return 0; }
Java
// Java program to find next larger element // in an n-ary tree. import java.util.*; class GFG { // Structure of a node of an n-ary tree static class Node { int key; Vector<Node> child; }; static Node res; // Utility function to create a new tree node static Node newNode(int key) { Node temp = new Node(); temp.key = key; temp.child = new Vector<>(); return temp; } static void nextLargerElementUtil(Node root, int x) { if (root == null) return; // if root is less than res but // greater than x, update res if (root.key > x) if ((res == null || (res).key > root.key)) res = root; // Number of children of root int numChildren = root.child.size(); // Recur calling for every child for (int i = 0; i < numChildren; i++) nextLargerElementUtil(root.child.get(i), x); return; } // Function to find next Greater element // of x in tree static Node nextLargerElement(Node root, int x) { // resultant node res = null; // calling helper function nextLargerElementUtil(root, x); return res; } // Driver Code public static void main(String[] args) { /* Let us create below tree * 5 * / | \ * 1 2 3 * / / \ \ * 15 4 5 6 */ Node root = newNode(5); (root.child).add(newNode(1)); (root.child).add(newNode(2)); (root.child).add(newNode(3)); (root.child.get(0).child).add(newNode(15)); (root.child.get(1).child).add(newNode(4)); (root.child.get(1).child).add(newNode(5)); (root.child.get(2).child).add(newNode(6)); int x = 5; System.out.print("Next larger element of " + x + " is "); System.out.print(nextLargerElement(root, x).key + "\n"); } } // This code is contributed by 29AjayKumar
Python3
# Python program to find next larger element # in an n-ary tree. class Node: # Structure of a node of an n-ary tree def __init__(self): self.key = 0 self.child = [] # Utility function to create a new tree node def newNode(key): temp = Node() temp.key = key temp.child = [] return temp res = None; def nextLargerElementUtil(root,x): global res if (root == None): return; # if root is less than res but # greater than x, update res if (root.key > x): if ((res == None or (res).key > root.key)): res = root; # Number of children of root numChildren = len(root.child) # Recur calling for every child for i in range(numChildren): nextLargerElementUtil(root.child[i], x) return # Function to find next Greater element # of x in tree def nextLargerElement(root,x): # resultant node global res res=None # Calling helper function nextLargerElementUtil(root, x) return res # Driver code root = newNode(5) (root.child).append(newNode(1)) (root.child).append(newNode(2)) (root.child).append(newNode(3)) (root.child[0].child).append(newNode(15)) (root.child[1].child).append(newNode(4)) (root.child[1].child).append(newNode(5)) (root.child[2].child).append(newNode(6)) x = 5 print("Next larger element of " , x , " is ",end='') print(nextLargerElement(root, x).key) # This code is contributed by rag2127.
C#
// C# program to find next larger element // in an n-ary tree. using System; using System.Collections.Generic; class GFG { // Structure of a node of an n-ary tree class Node { public int key; public List<Node> child; }; static Node res; // Utility function to create a new tree node static Node newNode(int key) { Node temp = new Node(); temp.key = key; temp.child = new List<Node>(); return temp; } static void nextLargerElementUtil(Node root, int x) { if (root == null) return; // if root is less than res but // greater than x, update res if (root.key > x) if ((res == null || (res).key > root.key)) res = root; // Number of children of root int numChildren = root.child.Count; // Recur calling for every child for (int i = 0; i < numChildren; i++) nextLargerElementUtil(root.child[i], x); return; } // Function to find next Greater element // of x in tree static Node nextLargerElement(Node root, int x) { // resultant node res = null; // calling helper function nextLargerElementUtil(root, x); return res; } // Driver Code public static void Main(String[] args) { /* Let us create below tree * 5 * / | \ * 1 2 3 * / / \ \ * 15 4 5 6 */ Node root = newNode(5); (root.child).Add(newNode(1)); (root.child).Add(newNode(2)); (root.child).Add(newNode(3)); (root.child[0].child).Add(newNode(15)); (root.child[1].child).Add(newNode(4)); (root.child[1].child).Add(newNode(5)); (root.child[2].child).Add(newNode(6)); int x = 5; Console.Write("Next larger element of " + x + " is "); Console.Write(nextLargerElement(root, x).key + "\n"); } } // This code is contributed by PrinciRaj1992
Javascript
<script> // JavaScript program to find next larger element // in an n-ary tree. // Structure of a node of an n-ary tree class Node { constructor() { this.key = 0; this.child = []; } }; var res = null; // Utility function to create a new tree node function newNode(key) { var temp = new Node(); temp.key = key; temp.child = []; return temp; } function nextLargerElementUtil(root, x) { if (root == null) return; // if root is less than res but // greater than x, update res if (root.key > x) if ((res == null || (res).key > root.key)) res = root; // Number of children of root var numChildren = root.child.length; // Recur calling for every child for (var i = 0; i < numChildren; i++) nextLargerElementUtil(root.child[i], x); return; } // Function to find next Greater element // of x in tree function nextLargerElement(root, x) { // resultant node res = null; // calling helper function nextLargerElementUtil(root, x); return res; } // Driver Code /* Let us create below tree * 5 * / | \ * 1 2 3 * / / \ \ * 15 4 5 6 */ var root = newNode(5); (root.child).push(newNode(1)); (root.child).push(newNode(2)); (root.child).push(newNode(3)); (root.child[0].child).push(newNode(15)); (root.child[1].child).push(newNode(4)); (root.child[1].child).push(newNode(5)); (root.child[2].child).push(newNode(6)); var x = 5; document.write("Next larger element of " + x + " is "); document.write(nextLargerElement(root, x).key + "<br>"); </script>
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA