对 RangeTree 中的节点建模

发布于 2024-10-16 21:30:32 字数 856 浏览 6 评论 0原文

我目前正在实现一个二维范围树。我在为我的 Node 类想出一个合理的模型(Java 中)时遇到了困难。

树中的节点可以具有以下任何一个:中间值、左右子指针、子树、数据指针和/或上一个和下一个指针。

我已将节点分解为三个独立的逻辑部分

  • :a)仅具有 midRange 值的节点 - 每个节点都有一个 midRange
  • b)具有左、右和子树点的节点。这代表一个非叶节点。
  • c) 不适用于下一个、上一个和数据指针。这代表一个叶节点。

我尝试应用复合模式和装饰模式,但没有成功。 我尝试制作:

  1. 具有所有可能的 getter/setter 的 Node 接口,即:getMidRange、getLeft、getRight、setLeft、setRight 等...
  2. 有两个类实现该接口:Node2D 和 LinkedNode(叶节点)。 Node2D 做了所有事情,除了保留下一个和上一个的链接。而 LinkedNode 只保留下一个和上一个的链接。

它是这样工作的,但是我想知道是否有更好的方法将其建模为一组类?

编辑:范围树(简短信息):在范围树中 - 所有数据都存储在叶节点中,并且树始终是平衡的。此外,所有叶子都处于相同高度。此外,叶子经过排序,并通过双向链表链接在一起。最后但并非最不重要的一点是,每个非叶节点都有一个子树 - 这也是一个范围树,但叶子在下一个属性上排序(如果原始树在 x 上排序,则为 y)。

RangeTreeBreakdown

I am currently implementing a 2D Range Tree. I am having trouble coming up with a plausible model (in Java) for my Node class.

A node in the tree may have any of the following: midrange value, right and left child pointer, subtree, data pointer and/or previous and next pointers.

I have broken down the Node into three separate logical pieces

  • a) Node with just midRange value - every node has a midRange
  • b) Node with left, right and subtree points. This represents a non-leaf node.
  • c) Not with next, prev and data pointers. This represents a leaf node.

I tried applying Composite and Decorator patterns, but to no avail.
I tried making:

  1. Node interface with all the possible getters/setters, i.e.: getMidRange, getLeft, getRight, setLeft, setRight, etc...
  2. Having two classes implement the interface: Node2D and LinkedNode (leaf node). Node2D did everything except keep the links to next and previous. While LinkedNode only kept links to next and previous.

It works like that, but I was wandering if there is a nicer way of modeling this as a set of classes?

EDIT: Range Tree (short info): In range trees - all data is stored in the Leaf nodes, and the tree is always balanced. Furthermore all leafs are at the same height. Also, the leaves are sorted, and linked together by a doubly linked list. Last, but not least, each non-leaf node has a subtree - which is also a range tree, but with the leaves sorted on next attribute (say y if original tree was sorted on x).

RangeTreeBreakdown

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深爱成瘾 2024-10-23 21:30:32
abstract class AbstractNode {
    int midRange;
}

class InnerNode extends AbstractNode {
    AbstractNode left;
    AbstractNode right;
    AbstractNode subtree;
}

class LeafNode extends AbstractNode {
    LeafNode next;
    LeafNode prev;
    Object data;
}
abstract class AbstractNode {
    int midRange;
}

class InnerNode extends AbstractNode {
    AbstractNode left;
    AbstractNode right;
    AbstractNode subtree;
}

class LeafNode extends AbstractNode {
    LeafNode next;
    LeafNode prev;
    Object data;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文