ホームページ >バックエンド開発 >C#.Net チュートリアル >C# を使用して二分探索ツリー アルゴリズムを作成する方法

C# を使用して二分探索ツリー アルゴリズムを作成する方法

王林
王林オリジナル
2023-09-19 13:03:281270ブラウズ

C# を使用して二分探索ツリー アルゴリズムを作成する方法

C# を使用して二分探索ツリー アルゴリズムを作成する方法。具体的なコード例が必要です。

二分探索ツリー (BST) は一般的に使用されるデータ構造であり、次のような特徴があります。高速な挿入、検索、削除操作。 C# では、オブジェクト指向アプローチを使用して二分探索ツリー アルゴリズムを作成できます。

まず、二分探索ツリー ノードのクラスを定義する必要があります。このクラスには、1 つの値と左右の子ノードへの 2 つのポインターが含まれます。コードは次のとおりです。

public class BSTNode
{
    public int Value { get; set; }
    public BSTNode Left { get; set; }
    public BSTNode Right { get; set; }

    public BSTNode(int value)
    {
        Value = value;
        Left = null;
        Right = null;
    }
}

次に、挿入、検索、削除などの操作のメソッドが含まれるバイナリ検索ツリー クラスを定義できます。コードは次のとおりです。

public class BinarySearchTree
{
    private BSTNode root;

    public BinarySearchTree()
    {
        root = null;
    }

    public void Insert(int value)
    {
        root = InsertNode(root, value);
    }

    private BSTNode InsertNode(BSTNode node, int value)
    {
        if (node == null)
        {
            node = new BSTNode(value);
        }
        else if (value < node.Value)
        {
            node.Left = InsertNode(node.Left, value);
        }
        else if (value > node.Value)
        {
            node.Right = InsertNode(node.Right, value);
        }
        return node;
    }

    public bool Search(int value)
    {
        return SearchNode(root, value);
    }

    private bool SearchNode(BSTNode node, int value)
    {
        if (node == null)
        {
            return false;
        }
        else if (value < node.Value)
        {
            return SearchNode(node.Left, value);
        }
        else if (value > node.Value)
        {
            return SearchNode(node.Right, value);
        }
        else
        {
            return true;
        }
    }

    public void Delete(int value)
    {
        root = DeleteNode(root, value);
    }

    private BSTNode DeleteNode(BSTNode node, int value)
    {
        if (node == null)
        {
            return node;
        }
        else if (value < node.Value)
        {
            node.Left = DeleteNode(node.Left, value);
        }
        else if (value > node.Value)
        {
            node.Right = DeleteNode(node.Right, value);
        }
        else
        {
            if (node.Left == null && node.Right == null)
            {
                node = null;
            }
            else if (node.Left == null)
            {
                node = node.Right;
            }
            else if (node.Right == null)
            {
                node = node.Left;
            }
            else
            {
                BSTNode minNode = FindMinNode(node.Right);
                node.Value = minNode.Value;
                node.Right = DeleteNode(node.Right, minNode.Value);
            }
        }
        return node;
    }

    private BSTNode FindMinNode(BSTNode node)
    {
        while (node.Left != null)
        {
            node = node.Left;
        }
        return node;
    }
}

上記は、C# を使用して二分探索ツリー アルゴリズムを作成する詳細なコード例です。 BSTNodeクラスとBinarySearchTreeクラスを作成することで、挿入、検索、削除などの操作を簡単に行うことができます。これらの操作の時間計算量は O(h) です。ここで、h は二分探索木の高さです。

サンプル コードは次のとおりです。

BinarySearchTree bst = new BinarySearchTree();
bst.Insert(5);
bst.Insert(3);
bst.Insert(8);
bst.Insert(2);
bst.Insert(4);
bst.Insert(7);
bst.Insert(9);

Console.WriteLine(bst.Search(4)); // 输出:True
Console.WriteLine(bst.Search(6)); // 输出:False

bst.Delete(8);
Console.WriteLine(bst.Search(8)); // 输出:False

上記のコードを通じて、二分探索ツリーの挿入、検索、および削除の操作が非常にシンプルかつ効率的であり、適切であることがわかります。多くの実用的なアプリケーション向けのアプリケーション シナリオ。この記事のコード例が、C# を理解して使用して二分探索ツリー アルゴリズムを作成するのに役立つことを願っています。

以上がC# を使用して二分探索ツリー アルゴリズムを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。