Imprime todos los Nodes en un árbol binario que tiene K hojas

Dado un árbol binario y un valor entero K, la tarea es encontrar todos los Nodes en el árbol binario dado que tengan K hojas en el subárbol enraizado con ellos.

C++

// C++ program to count all nodes having k leaves
// in subtree rooted with them
#include<bits/stdc++.h>
using namespace std;
 
/* A binary tree node  */
struct Node
{
    int data ;
    struct Node * left, * right ;
};
 
/* Helper function that allocates a new node with the
   given data and NULL left and right pointers. */
struct Node * newNode(int data)
{
    struct Node * node = new Node;
    node->data = data;
    node->left = node->right = NULL;
    return (node);
}
 
// Function to print all nodes having k leaves
int kLeaves(struct Node *ptr,int k)
{
    // Base Conditions : No leaves
    if (ptr == NULL)
        return 0;
 
    // if node is leaf
    if (ptr->left == NULL && ptr->right == NULL)
        return 1;
 
    // total leaves in subtree rooted with this
    // node
    int total = kLeaves(ptr->left, k) +
                kLeaves(ptr->right, k);
 
    // Print this node if total is k
    if (k == total)
        cout << ptr->data << " ";
 
    return total;
}
 
// Driver program to run the case
int main()
{
    struct Node *root = newNode(1);
    root->left        = newNode(2);
    root->right       = newNode(4);
    root->left->left  = newNode(5);
    root->left->right = newNode(6);
    root->left->left->left  = newNode(9);
    root->left->left->right  = newNode(10);
    root->right->right = newNode(8);
    root->right->left  = newNode(7);
    root->right->left->left  = newNode(11);
    root->right->left->right  = newNode(12);
 
    kLeaves(root, 2);
 
    return 0;
}

Java

// Java program to count all nodes having k leaves
// in subtree rooted with them
class GfG {
 
/* A binary tree node */
static class Node
{
    int data ;
    Node left, right ;
    Node(int data)
    {
        this.data = data;
    }
    Node()
    {
         
    }
}
 
/* Helper function that allocates a new node with the
given data and NULL left and right pointers. */
static Node newNode(int data)
{
    Node node = new Node();
    node.data = data;
    node.left = null;
    node.right = null;
    return (node);
}
 
// Function to print all nodes having k leaves
static int kLeaves(Node ptr,int k)
{
    // Base Conditions : No leaves
    if (ptr == null)
        return 0;
 
    // if node is leaf
    if (ptr.left == null && ptr.right == null)
        return 1;
 
    // total leaves in subtree rooted with this
    // node
    int total = kLeaves(ptr.left, k) + kLeaves(ptr.right, k);
 
    // Print this node if total is k
    if (k == total)
        System.out.print(ptr.data + " ");
 
    return total;
}
 
// Driver program to run the case
public static void main(String[] args)
{
    Node root = newNode(1);
    root.left     = newNode(2);
    root.right     = newNode(4);
    root.left.left = newNode(5);
    root.left.right = newNode(6);
    root.left.left.left = newNode(9);
    root.left.left.right = newNode(10);
    root.right.right = newNode(8);
    root.right.left = newNode(7);
    root.right.left.left = newNode(11);
    root.right.left.right = newNode(12);
 
    kLeaves(root, 2);
 
}
}

Python3

# Python3 program to count all nodes 
# having k leaves in subtree rooted with them
 
# A binary tree node has data, pointer to
# left child and a pointer to right child
# Helper function that allocates a new node 
# with the given data and None left and
# right pointers
class newNode:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None
 
# Function to print all nodes having k leaves
def kLeaves(ptr, k):
 
    # Base Conditions : No leaves
    if (ptr == None):
        return 0
 
    # if node is leaf
    if (ptr.left == None and
        ptr.right == None):
        return 1
 
    # total leaves in subtree rooted with this
    # node
    total = kLeaves(ptr.left, k) + \
            kLeaves(ptr.right, k)
 
    # Print this node if total is k
    if (k == total):
        print(ptr.data, end = " ")
 
    return total
 
# Driver code
root = newNode(1)
root.left = newNode(2)
root.right = newNode(4)
root.left.left = newNode(5)
root.left.right = newNode(6)
root.left.left.left = newNode(9)
root.left.left.right = newNode(10)
root.right.right = newNode(8)
root.right.left = newNode(7)
root.right.left.left = newNode(11)
root.right.left.right = newNode(12)
 
kLeaves(root, 2)
 
# This code is contributed by SHUBHAMSINGH10

C#

// C# program to count all nodes having k leaves
// in subtree rooted with them
using System;
     
class GfG
{
 
/* A binary tree node */
public class Node
{
    public int data ;
    public Node left, right ;
    public Node(int data)
    {
        this.data = data;
    }
    public Node()
    {
         
    }
}
 
/* Helper function that allocates a new node with the
given data and NULL left and right pointers. */
static Node newNode(int data)
{
    Node node = new Node();
    node.data = data;
    node.left = null;
    node.right = null;
    return (node);
}
 
// Function to print all nodes having k leaves
static int kLeaves(Node ptr,int k)
{
    // Base Conditions : No leaves
    if (ptr == null)
        return 0;
 
    // if node is leaf
    if (ptr.left == null && ptr.right == null)
        return 1;
 
    // total leaves in subtree rooted with this
    // node
    int total = kLeaves(ptr.left, k) + kLeaves(ptr.right, k);
 
    // Print this node if total is k
    if (k == total)
        Console.Write(ptr.data + " ");
 
    return total;
}
 
// Driver program to run the case
public static void Main(String[] args)
{
    Node root = newNode(1);
    root.left = newNode(2);
    root.right = newNode(4);
    root.left.left = newNode(5);
    root.left.right = newNode(6);
    root.left.left.left = newNode(9);
    root.left.left.right = newNode(10);
    root.right.right = newNode(8);
    root.right.left = newNode(7);
    root.right.left.left = newNode(11);
    root.right.left.right = newNode(12);
 
    kLeaves(root, 2);
 
}
}
 
// This code has been contributed by 29AjayKumar

Javascript

<script>
// Javascript program to count all nodes having k leaves
// in subtree rooted with them
 
/* A binary tree node */
class Node
{
    /* Helper function that allocates a new node with the
given data and NULL left and right pointers. */
    constructor(data)
    {
        this.data = data;
        this.left=this.right=null;
    }
}
 
// Function to print all nodes having k leaves
function kLeaves(ptr,k)
{
    // Base Conditions : No leaves
    if (ptr == null)
        return 0;
   
    // if node is leaf
    if (ptr.left == null && ptr.right == null)
        return 1;
   
    // total leaves in subtree rooted with this
    // node
    let total = kLeaves(ptr.left, k) + kLeaves(ptr.right, k);
   
    // Print this node if total is k
    if (k == total)
        document.write(ptr.data + " ");
   
    return total;
}
 
// Driver program to run the case
let root = new Node(1);
root.left     = new Node(2);
root.right     = new Node(4);
root.left.left = new Node(5);
root.left.right = new Node(6);
root.left.left.left = new Node(9);
root.left.left.right = new Node(10);
root.right.right = new Node(8);
root.right.left = new Node(7);
root.right.left.left = new Node(11);
root.right.left.right = new Node(12);
 
kLeaves(root, 2);
 
// This code is contributed by rag2127
</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

Deja una respuesta

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