0

C#でインターバルツリーを書いています。私がやりたいことは、既存の二分探索木を拡張して間隔を保存することであり、コア機能 (追加、取得、削除) を書き直す必要はありません。

BST 内には、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、 ではなくツリーに保存しようとしていることですNodeAddwithの既存の基本実装を使用できる方法はありますIntervalNodeか?

protected Node Add(Node root, KeyValuePair<TKey, TVal> data)
{
    // regular binary search tree insert
} 

私ができるようになりたいのは、次のようなものだと思います。

public void Add(Interval<TInterval> intvl, TVal val)
{
    _root = Add((Node)_root, new KeyValuePair<TInterval, TVal>(intvl.A, val));
    IntervalNode inserted = (IntervalNode)Get(_root, intvl.A);
    inserted.Interval = intvl;
}

// tree should store IntervalNodes, not Nodes
private IntervalNode _root;
4

1 に答える 1