C# 使用sortedset的平衡二叉搜索树

C# 使用sortedset的平衡二叉搜索树,c#,binary-tree,binary-search-tree,C#,Binary Tree,Binary Search Tree,请帮忙,我一直在尝试生成一个大小为1024的随机二进制搜索树,元素需要随机排序集。。。我可以通过手动添加元素来编写代码手动创建二叉搜索树,但我无法编写代码生成大小为1024的随机平衡二叉树,然后使用“尝试在该树中查找键…”。。。请先谢谢你 编辑从注释中添加代码 是的,这是家庭作业。。。这就是我到目前为止得到的代码: using System; namespace bst { public class Node { public int value;

请帮忙,我一直在尝试生成一个大小为1024的随机二进制搜索树,元素需要随机排序集。。。我可以通过手动添加元素来编写代码手动创建二叉搜索树,但我无法编写代码生成大小为1024的随机平衡二叉树,然后使用“尝试在该树中查找键…”。。。请先谢谢你

编辑从注释中添加代码

是的,这是家庭作业。。。这就是我到目前为止得到的代码:

using System; 
namespace bst { 
    public class Node { 
        public int value; 
        public Node Right = null; 
        public Node Left = null; 

        public Node(int value) 
        { 
            this.value = value; 
        } 
    } 

    public class BST { 
        public Node Root = null; 
        public BST() { }

        public void Add(int new_value) 
        { 
            if(Search(new_value)) 
            {
                Console.WriteLine("value (" + new_value + ") already");
            }
            else
            {
                AddNode(this.Root,new_value);
            }
        }
    }
}
使用递归。 每个分支生成一个新分支,选择未排序集合中的中间项,即中间值。将其放在树中的当前项中。将所有小于中值的项复制到另一个数组中,将该新数组发送到同一方法的调用。将大于中值的所有项复制到另一个数组,将该新数组发送到同一方法的调用\

平衡树必须有奇数个项目,除非未填写主父节点。您需要确定是否有两个值是中间值,重复项是属于下分支还是上分支。在我的示例中,我在上面的分支上放置了重复项

中位数将是相等数量的数字小于或大于该数字的数字。1,2,3,3,4,18,29,105,123 在这种情况下,中位数是4,尽管平均值(或平均值)要高得多

我没有包括决定中位数的代码

BuildTreeItem(TreeItem Item, Array Set)  
{
  Array Smalls;
  Array Larges;
  Median = DetermineMedian(Set);
  Item.Value = Median;
  if(Set.Count() == 1)
    return;  
  for (int i = 0; int i < Set.Count(); i++)
  {
    if(Set[i] < Median)
    {
      Smalls.new(Set[i]);
    }
    else
    {
      Larges.new(Set[i]);
    }
  }
  Item.Lower = new TreeItem;
  Item.Upper = new TreeItem;
  BuildTreeItem(TreeItem.Lower, Smalls);
  BuildTreeItem(TreeItem.Upper, Larges);
}
BuildTreeItem(TreeItem项,数组集)
{
数组小;
阵列放大;
中值=确定性中值(集合);
项目价值=中位数;
if(Set.Count()==1)
返回;
对于(int i=0;int i
除非是家庭作业,否则最简单的解决方案是先对数据进行排序,然后使用中间项作为根,然后每一半向下,构建一棵树。Xaade提出的方法类似,但由于确定性的复杂性,速度要慢得多

另一个选择是查看构建平衡树的算法(如),看看它是否符合您的需求


编辑:删除关于Xaade算法速度的不正确陈述-它实际上与快速排序一样快(n logn-使用logn递归级别检查每个递归级别上的每个元素),不确定我为什么估计它较慢。

使用系统;命名空间bst{public class Node{public int value;public Node Right=null;public Node Left=null;public Node(int value){this.value=value;}}}public class bst{public Node Root=null;public bst(){}public void Add(int new_value){if(Search(new_value)){Console.WriteLine(“value”(“+new_value+”)已存在”);}else{AddNode(this.Root,new_value);}基本上我完全迷路了,这是一个家庭作业问题,但首先我需要确定如何使这棵树在我的家庭作业中工作,并开始节省时间和搜索功能,但我只是想,如果我在编码部分得到帮助,那将非常棒…取决于排序方法。气泡排序将比我的算法慢m、 快速排序会更快虽然到目前为止,我找不到一种递归选择中间值的方法,这种方法比简单地从一开始就对集合进行排序更快。因此,我所需要的只是为中间值添加代码,然后生成树。