我们已经给出了一个二叉搜索树,我们想从二叉搜索树中删除叶子节点。
例子:
Input : 20 10 5 15 30 25 35
Output : Inorder before Deleting the leaf node
5 10 15 20 25 30 35
Inorder after Deleting the leaf node
10 20 30
This is the binary search tree where we
want to delete the leaf node.
20
/ \
10 30
/ \ / \
5 15 25 35
After deleting the leaf node the binary
search tree looks like
20
/ \
10 30
我们按顺序遍历给定的二叉搜索树。在遍历期间,我们检查当前节点是否为叶子,如果是,则将其删除。否则,我们会左右生孩子。要记住的重要一件事是,如果子树的根中有任何修改,则必须分配新的左右子级。
C++
// C++ program to delete leaf Node from
// binary search tree.
#include
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)
elif 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
输出:
Inorder before Deleting the leaf node.
5 10 15 20 25 30 35
INorder after Deleting the leaf node.
10 20 30