是指在二叉搜索树(Binary Search Tree,BST)中删除指定节点的操作。BST是一种特殊的二叉树,它满足以下性质:
删除BST中的节点可以分为以下几种情况:
以下是一个示例代码,演示如何在C#中删除BST的功能:
using System;
public class TreeNode
{
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int val)
{
this.val = val;
left = null;
right = null;
}
}
public class BST
{
private TreeNode root;
public BST()
{
root = null;
}
public void Insert(int val)
{
root = InsertNode(root, val);
}
private TreeNode InsertNode(TreeNode node, int val)
{
if (node == null)
{
return new TreeNode(val);
}
if (val < node.val)
{
node.left = InsertNode(node.left, val);
}
else if (val > node.val)
{
node.right = InsertNode(node.right, val);
}
return node;
}
public void Delete(int val)
{
root = DeleteNode(root, val);
}
private TreeNode DeleteNode(TreeNode node, int val)
{
if (node == null)
{
return null;
}
if (val < node.val)
{
node.left = DeleteNode(node.left, val);
}
else if (val > node.val)
{
node.right = DeleteNode(node.right, val);
}
else
{
if (node.left == null && node.right == null)
{
// Case 1: 要删除的节点是叶子节点
node = null;
}
else if (node.left == null)
{
// Case 2: 要删除的节点只有右子节点
node = node.right;
}
else if (node.right == null)
{
// Case 2: 要删除的节点只有左子节点
node = node.left;
}
else
{
// Case 3: 要删除的节点有两个子节点
TreeNode successor = FindMin(node.right);
node.val = successor.val;
node.right = DeleteNode(node.right, successor.val);
}
}
return node;
}
private TreeNode FindMin(TreeNode node)
{
while (node.left != null)
{
node = node.left;
}
return node;
}
}
public class Program
{
public static void Main(string[] args)
{
BST bst = new BST();
bst.Insert(5);
bst.Insert(3);
bst.Insert(7);
bst.Insert(2);
bst.Insert(4);
bst.Insert(6);
bst.Insert(8);
Console.WriteLine("BST before deletion:");
InorderTraversal(bst.root);
bst.Delete(3);
Console.WriteLine("BST after deletion:");
InorderTraversal(bst.root);
}
private static void InorderTraversal(TreeNode node)
{
if (node != null)
{
InorderTraversal(node.left);
Console.Write(node.val + " ");
InorderTraversal(node.right);
}
}
}
以上代码演示了如何在C#中实现BST的插入和删除功能。在删除节点时,根据节点的情况进行相应的操作,保持BST的性质。可以通过调用bst.Delete(val)
来删除BST中的节点。
这里推荐腾讯云的云数据库 TencentDB,它提供了高可用、高性能、弹性扩展的数据库服务,适用于各种规模的应用场景。具体产品介绍和链接地址请参考腾讯云官方文档:腾讯云数据库 TencentDB。
领取专属 10元无门槛券
手把手带您无忧上云