go - 如何在不使用接口的情况下扩展二叉树节点?
问题描述
type struct Node {
x Data
l *Node
r *Node
}
鉴于上面的结构,我正在研究二叉搜索树的各种实现,它们都在同一个包中,这样它们就可以在没有公共接口的情况下共享内部结构。但是,某些树需要一个等级字段作为其节点的一部分,我想将其创建为基本结构的扩展。我不希望不需要排名字段的树分配具有排名字段的节点。
type struct RankedNode {
Node
z rank
}
起初,这似乎是正确的,并且向我传达了明确的意图。但是,这不起作用,因为 internall
和r
fields 是 type Node
,破坏代码如下:
func (p *RankedNode) heapify() *RankedNode {
// ...
p.l.heapify()
p.r.heapify()
}
当然,p.l
andp.r
都是 type Node
,所以heapify
没有定义。我们可以假设任何节点只能链接到完全相同类型的节点。
问:接口和类型断言是Node
在没有泛型的情况下实现这一目标的唯一方法吗?
func (p *RankedNode) heapify() *RankedNode {
// ...
p.L().(*RankedNode).heapify()
p.R().(*RankedNode).heapify() // :(
}
解决方案
推荐阅读
- r - 如何使用 readr 的 read_delim_chunked 来使用 col_types?
- react-native - RxJS 不能抛出一个对象
- python - Docx 不会替换从 pandas 中提取的文本
- swift - 在子视图中更新 ObservableObject 的 @Published 变量
- python - 使用 OpenCV 将 RGB 图像转换为灰度图像时,为什么会得到绿色图像?
- sql - 将表从 Oracle 迁移到 SQL Server
- vba - 与 sumif 类似的连接代码
- python - 为什么我的 Python 和 pip 在不同的地方?
- java - SimpleJdbcCall Oracle 存储过程错误的参数数量或类型
- python - csv 列/未知数据中的连字符导致 int 转换错误