我正在写一个关于2-3-4树的实现。节点结构如下
type Node struct {
items []int
childs []*Node
parent *Node
}
字符串
我对下面的代码感到困惑。在我看来,这两部分做的是同样的事情。然而,其中一个是错误的。
- 权代码
cur = cur.parent
cur._insertNode(upTo, rn)
upTo, rn = cur._splitNode()
型
- 错误代码
cur.parent._insertNode(upTo, rn)
upTo, rn = cur.parent._splitNode()
cur = cur.parent
型
有谁能告诉我有什么区别吗?
我期待的是关于这个问题的解释。这是一个Go指针方法的陷阱?还是编译器的错误?
1条答案
按热度按时间w46czmvw1#
假设 C 是
cur
最初指向的节点,A 是 C 最初的父节点,假设对_insertNode
的调用在 A 和 C 之间插入了一个新节点 B;因此,我们从这里开始:字符串
(plus其他节点,与我的观点无关):
型
(plus其他节点,仍然与我的观点无关)。
需要注意的是,在调用
_insertNode
之前,C 的父代是 A;在调用_insertNode
之后,C 的父代是 B。考虑到这一点,这里是你的“正确的代码”,加上解释它在做什么的注解:
型
这里是你的“错误代码”,加上解释它在做什么的注解:
型
看到了吗?