Número máximo de Nodes distintos en una ruta de raíz a hoja

Dado un árbol binario, busque el recuento de Nodes distintos en todos los caminos de la raíz a la hoja e imprima el máximo. 

Ejemplos:

C++

// C++ program to find count of distinct nodes
// on a path with maximum distinct nodes.
#include <bits/stdc++.h>
using namespace std;
 
// A node of binary tree
struct Node {
    int data;
    struct Node *left, *right;
};
 
// A utility function to create a new Binary
// Tree node
Node* newNode(int data)
{
    Node* temp = new Node;
    temp->data = data;
    temp->left = temp->right = NULL;
    return temp;
}
 
int largestUinquePathUtil(Node* node, unordered_map<int, int> m)
{
    if (!node)
        return m.size();
 
    // put this node into hash
    m[node->data]++;
 
    int max_path = max(largestUinquePathUtil(node->left, m),
                       largestUinquePathUtil(node->right, m));
 
    // remove current node from path "hash"
    m[node->data]--;
 
    // if we reached a condition where all duplicate value
    // of current node is deleted
    if (m[node->data] == 0)
        m.erase(node->data);
 
    return max_path;
}
 
// A utility function to find long unique value path
int largestUinquePath(Node* node)
{
    if (!node)
        return 0;
 
    // hash that store all node value
    unordered_map<int, int> hash;
 
    // return max length unique value path
    return largestUinquePathUtil(node, hash);
}
 
// Driver program to test above functions
int main()
{
    // Create binary tree shown in above figure
    Node* root = newNode(1);
    root->left = newNode(2);
    root->right = newNode(3);
    root->left->left = newNode(4);
    root->left->right = newNode(5);
    root->right->left = newNode(6);
    root->right->right = newNode(7);
    root->right->left->right = newNode(8);
    root->right->right->right = newNode(9);
 
    cout << largestUinquePath(root) << endl;
 
    return 0;
}

Java

// Java program to find count of distinct nodes
// on a path with maximum distinct nodes.
import java.util.*;
class GFG
{
 
// A node of binary tree
static class Node
{
    int data;
    Node left, right;
};
 
// A utility function to create a new Binary
// Tree node
static Node newNode(int data)
{
    Node temp = new Node();
    temp.data = data;
    temp.left = temp.right = null;
    return temp;
}
 
static int largestUinquePathUtil(Node node, HashMap<Integer,
                                                    Integer> m)
{
    if (node == null)
        return m.size();
 
    // put this node into hash
    if(m.containsKey(node.data))
    {
        m.put(node.data, m.get(node.data) + 1);
    }
    else
    {
        m.put(node.data, 1);
    }
 
    int max_path = Math.max(largestUinquePathUtil(node.left, m),
                            largestUinquePathUtil(node.right, m));
 
    // remove current node from path "hash"
    if(m.containsKey(node.data))
    {
        m.put(node.data, m.get(node.data) - 1);
    }
 
    // if we reached a condition where all duplicate value
    // of current node is deleted
    if (m.get(node.data) == 0)
        m.remove(node.data);
 
    return max_path;
}
 
// A utility function to find long unique value path
static int largestUinquePath(Node node)
{
    if (node == null)
        return 0;
 
    // hash that store all node value
    HashMap<Integer,
            Integer> hash = new HashMap<Integer,
                                        Integer>();
 
    // return max length unique value path
    return largestUinquePathUtil(node, hash);
}
 
// Driver Code
public static void main(String[] args)
{
    // Create binary tree shown in above figure
    Node root = newNode(1);
    root.left = newNode(2);
    root.right = newNode(3);
    root.left.left = newNode(4);
    root.left.right = newNode(5);
    root.right.left = newNode(6);
    root.right.right = newNode(7);
    root.right.left.right = newNode(8);
    root.right.right.right = newNode(9);
 
    System.out.println(largestUinquePath(root));   
}
}
 
// This code is contributed by Princi Singh

Python3

# Python3 program to find count of
# distinct nodes on a path with
# maximum distinct nodes.
 
# A utility class to create a
# new Binary Tree node
class newNode:
    def __init__(self, data):
        self.data = data
        self.left = self.right = None
 
def largestUinquePathUtil(node, m):
    if (not node or node.data in m):
        return len(m)
 
    # put this node into hash
    if node.data in m:
        m[node.data] += 1
    else:
        m[node.data] = 1
 
    max_path = max(largestUinquePathUtil(node.left, m),
                   largestUinquePathUtil(node.right, m))
 
    # remove current node from path "hash"
    m[node.data] -= 1
 
    # if we reached a condition
    # where all duplicate value
    # of current node is deleted
    if (m[node.data] == 0):
        del m[node.data]
 
    return max_path
 
# A utility function to find
# long unique value path
def largestUinquePath(node):
    if (not node):
        return 0
 
    # hash that store all node value
    Hash = {}
 
    # return max length unique value path
    return largestUinquePathUtil(node, Hash)
 
# Driver Code
if __name__ == '__main__':
 
    # Create binary tree shown
    # in above figure
    root = newNode(1)
    root.left = newNode(2)
    root.right = newNode(3)
    root.left.left = newNode(4)
    root.left.right = newNode(5)
    root.right.left = newNode(6)
    root.right.right = newNode(7)
    root.right.left.right = newNode(8)
    root.right.right.right = newNode(9)
 
    print(largestUinquePath(root))
 
# This code is contributed by PranchalK

C#

// C# program to find count of distinct nodes
// on a path with maximum distinct nodes.
using System;
using System.Collections.Generic;
 
class GFG
{
 
// A node of binary tree
public class Node
{
    public int data;
    public Node left, right;
};
 
// A utility function to create a new Binary
// Tree node
static Node newNode(int data)
{
    Node temp = new Node();
    temp.data = data;
    temp.left = temp.right = null;
    return temp;
}
 
static int largestUinquePathUtil(Node node,
                                 Dictionary<int, int> m)
{
    if (node == null)
        return m.Count;
 
    // put this node into hash
    if(m.ContainsKey(node.data))
    {
        m[node.data] = m[node.data] + 1;
    }
    else
    {
        m.Add(node.data, 1);
    }
 
    int max_path = Math.Max(largestUinquePathUtil(node.left, m),
                            largestUinquePathUtil(node.right, m));
 
    // remove current node from path "hash"
    if(m.ContainsKey(node.data))
    {
        m[node.data] = m[node.data] - 1;
    }
 
    // if we reached a condition where all
    // duplicate value of current node is deleted
    if (m[node.data] == 0)
        m.Remove(node.data);
 
    return max_path;
}
 
// A utility function to find long unique value path
static int largestUinquePath(Node node)
{
    if (node == null)
        return 0;
 
    // hash that store all node value
    Dictionary<int,    
               int> hash = new Dictionary<int,
                                          int>();
 
    // return max length unique value path
    return largestUinquePathUtil(node, hash);
}
 
// Driver Code
public static void Main(String[] args)
{
     
    // Create binary tree shown in above figure
    Node root = newNode(1);
    root.left = newNode(2);
    root.right = newNode(3);
    root.left.left = newNode(4);
    root.left.right = newNode(5);
    root.right.left = newNode(6);
    root.right.right = newNode(7);
    root.right.left.right = newNode(8);
    root.right.right.right = newNode(9);
 
    Console.WriteLine(largestUinquePath(root));
}
}
 
// This code is contributed by 29AjayKumar

Javascript

<script>
 
    // JavaScript program to find count of distinct nodes
    // on a path with maximum distinct nodes.
     
    class Node
    {
        constructor(data) {
           this.left = null;
           this.right = null;
           this.data = data;
        }
    }
     
    // A utility function to create a new Binary
    // Tree node
    function newNode(data)
    {
        let temp = new Node(data);
        return temp;
    }
 
    function largestUinquePathUtil(node, m)
    {
        if (node == null)
            return m.size;
 
        // put this node into hash
        if(m.has(node.data))
        {
            m.set(node.data, m.get(node.data) + 1);
        }
        else
        {
            m.set(node.data, 1);
        }
 
        let max_path = Math.max(largestUinquePathUtil(node.left, m),
                                largestUinquePathUtil(node.right, m));
 
        // remove current node from path "hash"
        if(m.has(node.data))
        {
            m.set(node.data, m.get(node.data) - 1);
        }
 
        // if we reached a condition where all duplicate value
        // of current node is deleted
        if (m.get(node.data) == 0)
            m.delete(node.data);
 
        return max_path;
    }
 
    // A utility function to find long unique value path
    function largestUinquePath(node)
    {
        if (node == null)
            return 0;
 
        // hash that store all node value
        let hash = new Map();
 
        // return max length unique value path
        return largestUinquePathUtil(node, hash);
    }
     
    // Create binary tree shown in above figure
    let root = newNode(1);
    root.left = newNode(2);
    root.right = newNode(3);
    root.left.left = newNode(4);
    root.left.right = newNode(5);
    root.right.left = newNode(6);
    root.right.right = newNode(7);
    root.right.left.right = newNode(8);
    root.right.right.right = newNode(9);
   
    document.write(largestUinquePath(root));   
 
</script>

Publicación traducida automáticamente

Artículo escrito por Nishant_Singh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *