对 RangeTree 中的节点建模
我目前正在实现一个二维范围树。我在为我的 Node 类想出一个合理的模型(Java 中)时遇到了困难。
树中的节点可以具有以下任何一个:中间值、左右子指针、子树、数据指针和/或上一个和下一个指针。
我已将节点分解为三个独立的逻辑部分
- :a)仅具有 midRange 值的节点 - 每个节点都有一个 midRange
- b)具有左、右和子树点的节点。这代表一个非叶节点。
- c) 不适用于下一个、上一个和数据指针。这代表一个叶节点。
我尝试应用复合模式和装饰模式,但没有成功。 我尝试制作:
- 具有所有可能的 getter/setter 的 Node 接口,即:getMidRange、getLeft、getRight、setLeft、setRight 等...
- 有两个类实现该接口:Node2D 和 LinkedNode(叶节点)。 Node2D 做了所有事情,除了保留下一个和上一个的链接。而 LinkedNode 只保留下一个和上一个的链接。
它是这样工作的,但是我想知道是否有更好的方法将其建模为一组类?
编辑:范围树(简短信息):在范围树中 - 所有数据都存储在叶节点中,并且树始终是平衡的。此外,所有叶子都处于相同高度。此外,叶子经过排序,并通过双向链表链接在一起。最后但并非最不重要的一点是,每个非叶节点都有一个子树 - 这也是一个范围树,但叶子在下一个属性上排序(如果原始树在 x 上排序,则为 y ) )。
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:
- Node interface with all the possible getters/setters, i.e.: getMidRange, getLeft, getRight, setLeft, setRight, etc...
- 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).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)