首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C#中删除BST的功能

是指在二叉搜索树(Binary Search Tree,BST)中删除指定节点的操作。BST是一种特殊的二叉树,它满足以下性质:

  1. 左子树上的所有节点的值都小于根节点的值。
  2. 右子树上的所有节点的值都大于根节点的值。
  3. 左右子树也都是BST。

删除BST中的节点可以分为以下几种情况:

  1. 要删除的节点是叶子节点(没有子节点):直接删除该节点即可。
  2. 要删除的节点只有一个子节点:将该节点的子节点替换为该节点的位置。
  3. 要删除的节点有两个子节点:找到该节点的后继节点(右子树中最小的节点),将后继节点的值复制到要删除的节点中,然后删除后继节点。

以下是一个示例代码,演示如何在C#中删除BST的功能:

代码语言:txt
复制
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

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

6分19秒

44.尚硅谷_硅谷商城[新]_在适配器中删除选中的item.avi

8分22秒

134-尚硅谷-图解Java数据结构和算法-BST删除结点的注意事项

8分22秒

134-尚硅谷-图解Java数据结构和算法-BST删除结点的注意事项

8分21秒

14-测试BaseMapper的删除功能

15分39秒

133-尚硅谷-图解Java数据结构和算法-BST删除有二颗子树的结点

15分39秒

133-尚硅谷-图解Java数据结构和算法-BST删除有二颗子树的结点

11分36秒

132-尚硅谷-图解Java数据结构和算法-BST删除有一颗子树的结点

11分36秒

132-尚硅谷-图解Java数据结构和算法-BST删除有一颗子树的结点

10分3秒

65-IOC容器在Spring中的实现

7分9秒

MySQL教程-47-删除表中的数据

10分28秒

JavaSE进阶-035-接口在开发中的作用

7分46秒

JavaSE进阶-037-接口在开发中的作用

领券