我正在用C#编写间隔树。我想做的只是扩展现有的二进制搜索树来存储间隔,而不必重写核心功能(添加,获取,删除)。
在BST内部,我有一个<script type = "text/javascript">
function GetLabelText() {
$.ajax({
type: "POST",
url: "page.aspx/functionname",
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccess,
failure: function(response) {
alert(response.d);
}
});
}
function OnSuccess(response) {
$("#label").val(response.d);
}
</script>
类:
Node
在区间树中,我有一个protected class Node
{
public KeyValuePair<TKey, TVal> Data;
public Node Left, Right;
public Node(KeyValuePair<TKey, TVal> data,
Node left = null, Node right = null)
{
Data = data;
Left = left; Right = right;
}
}
类扩展IntervalNode
:
Node
我遇到的问题是尝试将private class IntervalNode : Node
{
public Interval<TInterval> Interval;
public override string ToString()
{
return string.Format("A={0}, B={1}", Interval.A, Interval.B);
}
public IntervalNode(KeyValuePair<TInterval, TVal> data,
Node left = null, Node right = null)
: base(data, left, right)
{
}
}
存储在树中,而不是IntervalNode
。我现在有什么方法可以使用Node
Add
的现有基本实现吗?
IntervalNode
我想我能做的就是这样:
protected Node Add(Node root, KeyValuePair<TKey, TVal> data)
{
// regular binary search tree insert
}
答案 0 :(得分:1)
您的示例代码无法编译,但这是我认为您想要获得的内容:
protected class Node
{
public KeyValuePair<TKey, TVal> Data;
public Node Left, Right;
public Node(KeyValuePair<TKey, TVal> data,
Node left = null, Node right = null)
{
Data = data;
Left = left; Right = right;
}
public virtual void Add(Node root, KeyValuePair<TKey, TVal> data)
{
//Do whatever
}
}
然后在派生类中:
private class IntervalNode: Node
{
public Interval<TInterval> Interval;
public override string ToString()
{
return string.Format("A={0}, B={1}", Interval.A, Interval.B);
}
public IntervalNode(KeyValuePair<TInterval, TVal> data,
Node left = null, Node right = null)
: base(data, left, right)
{
}
public override void Add(Node root, KeyValuePair<TInterval, TVal> data)
{
//Do whatever you need to, then
base.Add(root, data);
}
}
你需要修复你的泛型问题,但你应该能够看到这一点。
由于IntervalNode
是Node
,因此您可以将其存储在基类所在的相同位置,不需要将其存储或将存储分开。这是继承的一个很好的部分。