求教,以基础树结构(二叉搜索树)为例:
type TreeNode struct{
Val int
Left *TreeNode
Right *TreeNode
}
已经基于这种结构写了 Max()
和 Min()
方法,例如:
func (n *TreeNode) Max(){}
如果想要把基础树结构扩展到红黑树 RBTNode
,相当于基础树结构 TreeNode
多加了 Color 字段:
type RBTNode struct{
Color int // 新加的字段
Val int
Left *RBTNode
Right *RBTNode
}
如果想对 RBTNode
调用与扩展属性无关的方法,例如 Max()
,只能通过重写一份相似代码的形式来实现吗?例如:
func (n *RBTNode) Max(){}
// 备注:之前想过派生,但很明显是不可行的。。
1
jworg 2021-06-04 19:12:57 +08:00
这个关键词是 ”golang 组合 继承“ 用 interface 来做,可以见 https://www.jianshu.com/p/150523db21a9
|
2
darksword21 2021-06-04 20:06:42 +08:00 via iPhone
RBTNode 中直接加 TreeNode 然后调可以吗
|
3
darksword21 2021-06-04 20:07:00 +08:00 via iPhone
用手机不方便打代码
|
4
seran7 OP @darksword21 噢噢我明白你的意思,是不是这样?
type RBTNode struct { Color int TreeNode } 但结构体是递归的,这样会使 RBTNode.Left 的类型是 TreeNode 而不是 RBTNode,没有 Color 属性 |
6
Dom 2021-06-05 19:48:57 +08:00 via Android
用 interface,treenode,rbtnode 实现 max()
|
7
index90 2021-06-23 18:03:20 +08:00
独立一个 Max 函数: func Max(TreeNodeInterface)
对于 RBTNode 的 Max 方法,调用 Max(RBTNode) |