【问题标题】:C# Binary Search Tree giving Incorrect Majority ElementC# 二叉搜索树给出不正确的多数元素
【发布时间】:2018-11-06 01:59:31
【问题描述】:

我使用 BST 的主要原因是获取多数元素,即 Value > Array.Length / 2。

因此,如果我们有一个包含 5 个元素的数组,则必须至少有 3 个元素才能被视为多数。

现在我面临的问题是多数元素被选择用于数组中的第一个元素。

这是下面的代码:

public Node nnde(Node root)
{               
    if (root== null)
    {
        root= newNode;
        size++;
        return root;
    }

    if (elm < root.elm)
    {
        if (root.lft != null)
        {
            InsertNewNode(root.lft, elm);
        }
        else
        {
            root.lft = new Node(elm);
        }
    }
    else if (elm> root.rght)
    {
        if (root.rght != null)
        {
            InsertNewNode( root.rght, elm);
        }
        else
        {
            root.rght = new Node(elm);
        }
    }

    return root;
}

数组中的元素:2 0 1 2 1

应该没有多数元素,但是,我当前编程的 BST 显示为 2。

【问题讨论】:

  • 您必须为数组中的每个唯一值调用 GetMajorityElement 方法,然后比较哪个返回值最大。
  • 已经在这样做了
  • 代码没有贴出来。这可能就是错误所在。
  • 通过添加提到的代码编辑帖子
  • 在您的方法InsertNewNode 中,您没有正确更新size 属性。使用此代码,您的树的大小将为 2,这就是为什么它将多数返回为 2

标签: c# recursion binary-search-tree


【解决方案1】:

在试图弄清楚问题究竟是什么之后,我意识到我忘记在 InsertNewNode() 方法中插入一个简单的 size++。

编辑的代码如下:

        if (elm <  root.lft)
        {
            if (root.lft != null)
            {
                root.lft = InsertNewNode(root.lft, elm);
            }
            else
            {
                root.lft = new Node(elm);
                size++;
            }
        }
        else if (elm > root.rght)
        {
            if (root.rght != null)
            {
                root.rght = InsertNewNode(root.rght, elm);
            }
            else
            {
                root.rght = new Node(elm);
                size++;
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多