二进制搜索树删除功能

时间:2019-03-09 22:45:04

标签: c# binary binary-tree

我正在为二进制搜索树创建删除函数,并遇到了一个问题。

private BinaryTreeNode<T> BinaryDelete(BinaryTreeNode<T> root, T value)
    {
        if (root == null)
        {
            return root;
        }

        int compareResult = value.CompareTo(root.Value);

        if (compareResult < 0)
        {
            root.Left = this.BinaryDelete(root.Left, value);
        }
        else if (compareResult > 0)
        {
            root.Right = this.BinaryDelete(root.Right, value);
        }
        else
        {
            if (root.Left == null)
            {
                return root.Right;
            }
            else if (root.Right == null)
            {
                return root.Left;
            }

            root.Value = this.FindMinLeftLeaf(root.Left);

            root.Left = this.BinaryDelete(root.Left, root.Value);
        }

        return root;
    }

    private T FindMinLeftLeaf(BinaryTreeNode<T> root)
    {
        while (root.Left != null)
        {
            root = root.Left;
        }

        return root.Value;
    }

因此,基本上,root.Value = this.FindMinLeftLeaf(root.Left);在根的左子节点中搜索。在学习期间,我看到了一些示例,这些示例是在正确的孩子中进行搜索的,因此有点令人困惑。 简而言之: 这两行应该是这样吗?

root.Value = this.FindMinLeftLeaf(root.Right);
root.Right= this.BinaryDelete(root.Right, root.Value)

还是我在第一个示例中使用它们的方式?

0 个答案:

没有答案