C# &引用;分类“;树型数据结构
我创建了一个树数据结构,我希望元素按如下方式排序:C# &引用;分类“;树型数据结构,c#,data-structures,tree,C#,Data Structures,Tree,我创建了一个树数据结构,我希望元素按如下方式排序: 10 / \ 5 12 / \ / \ 3 7 11 18 如果添加的元素的值小于另一个元素的值,则应向左链接,如果较大,则应向右链接。我的问题是,我就是不能得到正确的排序方法 class Tree { private class TElement { public int _value; public TElement _left;
10
/ \
5 12
/ \ / \
3 7 11 18
如果添加的元素的值小于另一个元素的值,则应向左链接,如果较大,则应向右链接。我的问题是,我就是不能得到正确的排序方法
class Tree
{
private class TElement
{
public int _value;
public TElement _left;
public TElement _right;
public TElement(int value)
{
_value = value;
}
}
private TElement RootElement;
public void Add(int value)
{
TElement newElement = new TElement(value);
TElement current = new TElement(value);
current = RootElement;
if (RootElement == null)
{
RootElement = newElement;
return;
}
SortNewElement(RootElement, RootElement, newElement, RootElement);
}
private void SortNewElement(TElement left, TElement right, TElement newElement, TElement RootElement)
{
if (newElement._value < RootElement._value && RootElement._left == null)
{
left._left = newElement;
return;
}
if (newElement._value > RootElement._value && RootElement._right == null)
{
right._right = newElement;
return;
}
if (newElement._value < left._value && left._left == null)
{
left._left = newElement;
return;
}
if (newElement._value > right._value && right._right == null)
{
right._right = newElement;
return;
}
SortNewElement(left._left, right._right, newElement, RootElement);
}
}
类树
{
私人类远程通信
{
公共国际价值;
公共电话服务(左),;
公共电话服务权;
公共远程通信(int值)
{
_价值=价值;
}
}
私人远程通信根元素;
公共void Add(int值)
{
远程通讯新元素=新远程通讯(值);
远程通讯当前=新远程通讯(值);
当前=根元素;
if(RootElement==null)
{
RootElement=newElement;
返回;
}
SortNewElement(RootElement,RootElement,newElement,RootElement);
}
私有void SortNewElement(TElement左、TElement右、TElement新元素、TElement根元素)
{
if(newElement.\u valueRootElement.\u value&&RootElement.\u right==null)
{
右。_right=新元素;
返回;
}
if(newElement.\u valueright.\u value&&right.\u right==null)
{
右。_right=新元素;
返回;
}
SortNewElement(左。\左,右。\右,新元素,根元素);
}
}
我知道它不起作用,因为它试图获取空元素的链接节点。从您的问题中我可以理解,您只是试图在二元搜索树中插入一个新节点。它的顺序遍历将是一个排序数组
class element{
public:
int value;
*element left;
*element right;
element(int value)
value = value;
public add(&element a)
if (a != null)
{
if (left!=null){
left = a;
}
else{
if (left.value > a.value){
right = left;
left= a;
}
else{
right=a;
}
}
您可以通过以下简单的伪代码来实现
insert_new( Node* node, value)
{
if(value > node->value)
{
if(node->right != null)
{
insert_new(node->right,value);
}
else
{
node->right = new Node(value);
return;
}
}
else
{
if(node->left != null)
{
insert_new(node->left,value)
}
else
{
node->left = new Node(value);
return;
}
}
}
也许您可以使用内置的
SortedSet
,它是使用自平衡红黑树实现的。您这样做是为了实验/学习/家庭作业吗?如果没有,则有一些内置集合可以更好地为您服务。为什么要添加null作为根元素?若元素为null,则返回或显示错误。这是C/C++。。。这是一个C#问题,是的,但重点是你不必做排序函数,你只需要在add函数中提供“排序”逻辑