Eliminar todos los Nodes hoja del árbol de búsqueda binaria

Hemos proporcionado un árbol de búsqueda binario y queremos eliminar los Nodes hoja del árbol de búsqueda binario. 

Ejemplos: 

C++

// C++ program to delete leaf Node from
// binary search tree.
#include <bits/stdc++.h>
using namespace std;
 
struct Node {
    int data;
    struct Node* left;
    struct Node* right;
};
 
// Create a newNode in binary search tree.
struct Node* newNode(int data)
{
    struct Node* temp = new Node;
    temp->data = data;
    temp->left = temp->right = NULL;
    return temp;
}
 
// Insert a Node in binary search tree.
struct Node* insert(struct Node* root, int data)
{
    if (root == NULL)
        return newNode(data);
    if (data < root->data)
        root->left = insert(root->left, data);
    else if (data > root->data)
        root->right = insert(root->right, data);
    return root;
}
 
// Function for inorder traversal in a BST.
void inorder(struct Node* root)
{
    if (root != NULL) {
        inorder(root->left);
        cout << root->data << " ";
        inorder(root->right);
    }
}
 
// Delete leaf nodes from binary search tree.
struct Node* leafDelete(struct Node* root)
{
    if (root == NULL)
        return NULL;
    if (root->left == NULL && root->right == NULL) {
        free(root);
        return NULL;
    }
 
    // Else recursively delete in left and right
    // subtrees.
    root->left = leafDelete(root->left);
    root->right = leafDelete(root->right);
 
    return root;
}
 
// Driver code
int main()
{
    struct Node* root = NULL;
    root = insert(root, 20);
    insert(root, 10);
    insert(root, 5);
    insert(root, 15);
    insert(root, 30);
    insert(root, 25);
    insert(root, 35);
    cout << "Inorder before Deleting the leaf Node." << endl;
    inorder(root);
    cout << endl;
    leafDelete(root);
    cout << "INorder after Deleting the leaf Node." << endl;
    inorder(root);
    return 0;
}

Java

// Java program to delete leaf Node from
// binary search tree.
class GfG {
 
    static class Node {
        int data;
        Node left;
        Node right;
    }
 
    // Create a newNode in binary search tree.
    static Node newNode(int data)
    {
        Node temp = new Node();
        temp.data = data;
        temp.left = null;
        temp.right = null;
        return temp;
    }
 
    // Insert a Node in binary search tree.
    static Node insert(Node root, int data)
    {
        if (root == null)
            return newNode(data);
        if (data < root.data)
            root.left = insert(root.left, data);
        else if (data > root.data)
            root.right = insert(root.right, data);
        return root;
    }
 
    // Function for inorder traversal in a BST.
    static void inorder(Node root)
    {
        if (root != null) {
            inorder(root.left);
            System.out.print(root.data + " ");
            inorder(root.right);
        }
    }
 
    // Delete leaf nodes from binary search tree.
    static Node leafDelete(Node root)
    {
        if (root == null) {
            return null;
        }
        if (root.left == null && root.right == null) {
            return null;
        }
 
        // Else recursively delete in left and right
        // subtrees.
        root.left = leafDelete(root.left);
        root.right = leafDelete(root.right);
 
        return root;
    }
 
    // Driver code
    public static void main(String[] args)
    {
        Node root = null;
        root = insert(root, 20);
        insert(root, 10);
        insert(root, 5);
        insert(root, 15);
        insert(root, 30);
        insert(root, 25);
        insert(root, 35);
        System.out.println("Inorder before Deleting the leaf Node. ");
        inorder(root);
        System.out.println();
        leafDelete(root);
        System.out.println("INorder after Deleting the leaf Node. ");
        inorder(root);
    }
}
// This code is contributed by Prerna saini

Python3

# Python 3 program to delete leaf
# Node from binary search tree.
 
# Create a newNode in binary search tree.
class newNode:
 
    # Constructor to create a new node
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None
 
# Insert a Node in binary search tree.
def insert(root, data):
    if root == None:
        return newNode(data)
    if data < root.data:
        root.left = insert(root.left, data)
    else if data > root.data:
        root.right = insert(root.right, data)
    return root
 
# Function for inorder traversal in a BST.
def inorder(root):
    if root != None:
        inorder(root.left)
        print(root.data, end = " ")
        inorder(root.right)
 
# Delete leaf nodes from binary search tree.
def leafDelete(root):
    if root == None:
        return None
    if root.left == None and root.right == None:
        return None
 
    # Else recursively delete in left
    # and right subtrees.
    root.left = leafDelete(root.left)
    root.right = leafDelete(root.right)
 
    return root
 
# Driver code
if __name__ == '__main__':
    root = None
    root = insert(root, 20)
    insert(root, 10)
    insert(root, 5)
    insert(root, 15)
    insert(root, 30)
    insert(root, 25)
    insert(root, 35)
    print("Inorder before Deleting the leaf Node.")
    inorder(root)
    leafDelete(root)
    print()
    print("INorder after Deleting the leaf Node.")
    inorder(root)    
 
# This code is contributed by PranchalK

C#

// C# program to delete leaf Node from
// binary search tree.
using System;
 
class GfG {
 
    class Node {
        public int data;
        public Node left;
        public Node right;
    }
 
    // Create a newNode in binary search tree.
    static Node newNode(int data)
    {
        Node temp = new Node();
        temp.data = data;
        temp.left = null;
        temp.right = null;
        return temp;
    }
 
    // Insert a Node in binary search tree.
    static Node insert(Node root, int data)
    {
        if (root == null)
            return newNode(data);
        if (data < root.data)
            root.left = insert(root.left, data);
        else if (data > root.data)
            root.right = insert(root.right, data);
        return root;
    }
 
    // Function for inorder traversal in a BST.
    static void inorder(Node root)
    {
        if (root != null) {
            inorder(root.left);
            Console.Write(root.data + " ");
            inorder(root.right);
        }
    }
 
    // Delete leaf nodes from binary search tree.
    static Node leafDelete(Node root)
    {
        if (root == null) {
            return null;
        }
        if (root.left == null && root.right == null) {
            return null;
        }
 
        // Else recursively delete in
        // left and right subtrees.
        root.left = leafDelete(root.left);
        root.right = leafDelete(root.right);
 
        return root;
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        Node root = null;
        root = insert(root, 20);
        insert(root, 10);
        insert(root, 5);
        insert(root, 15);
        insert(root, 30);
        insert(root, 25);
        insert(root, 35);
        Console.WriteLine("Inorder before Deleting"
                          + "the leaf Node. ");
        inorder(root);
        Console.WriteLine();
        leafDelete(root);
        Console.WriteLine("INorder after Deleting"
                          + "the leaf Node. ");
        inorder(root);
    }
}
 
// This code has been contributed
// by PrinciRaj1992

Javascript

<script>
 
// JavaScript program to delete leaf Node from
// binary search tree.
class Node {
    constructor() {
        this.data = 0;
        this.left = null;
        this.right = null;
    }
}
 
    // Create a newNode in binary search tree.
    function newNode(data) {
        var temp = new Node();
        temp.data = data;
        temp.left = null;
        temp.right = null;
        return temp;
    }
 
    // Insert a Node in binary search tree.
    function insert(root , data) {
        if (root == null)
            return newNode(data);
        if (data < root.data)
            root.left = insert(root.left, data);
        else if (data > root.data)
            root.right = insert(root.right, data);
        return root;
    }
 
    // Function for inorder traversal in a BST.
    function inorder(root) {
        if (root != null) {
            inorder(root.left);
            document.write(root.data + " ");
            inorder(root.right);
        }
    }
 
    // Delete leaf nodes from binary search tree.
    function leafDelete(root) {
        if (root == null) {
            return null;
        }
        if (root.left == null && root.right == null) {
            return null;
        }
 
        // Else recursively delete in left and right
        // subtrees.
        root.left = leafDelete(root.left);
        root.right = leafDelete(root.right);
 
        return root;
    }
 
    // Driver code
     
        var root = null;
        root = insert(root, 20);
        insert(root, 10);
        insert(root, 5);
        insert(root, 15);
        insert(root, 30);
        insert(root, 25);
        insert(root, 35);
        document.write(
        "Inorder before Deleting the leaf Node. <br/>"
        );
        inorder(root);
        document.write("<br/>");
        leafDelete(root);
        document.write(
        "INorder after Deleting the leaf Node. <br/>"
        );
        inorder(root);
 
// This code is contributed by todaysgaurav
 
</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 *