第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

重新平衡樹后如何更改接收器類型(根節(jié)點(diǎn))

重新平衡樹后如何更改接收器類型(根節(jié)點(diǎn))

Go
猛跑小豬 2023-08-07 14:28:48
我正在嘗試在 Go 中實(shí)現(xiàn)二叉樹,但目前我陷入了樹的重新平衡。重新平衡后,根節(jié)點(diǎn)很可能會(huì)發(fā)生變化。由于根節(jié)點(diǎn)是接收器類型,我必須更改接收器類型指向的值。之前的根節(jié)點(diǎn)現(xiàn)在被用作另一個(gè)節(jié)點(diǎn),這就導(dǎo)致這個(gè)節(jié)點(diǎn)現(xiàn)在也是根節(jié)點(diǎn)的情況。func (n *treeNode) rebalance()  {      sorted := n.traverseTree([]*treeNode{})  //returns a sorted array of *treeNode    newRoot := innerRebalance(sorted) //the method gives the correct result    *n = *newRoot//now I have a cyclic reference in the tree}重新平衡是在 add 函數(shù)中調(diào)用的。我不想公開重新平衡方法,因?yàn)樗且粋€(gè)實(shí)現(xiàn)細(xì)節(jié)。我想在 Add 方法中調(diào)用重新平衡方法。界面:type Store interface {    Add(key string, value string)    Get(key string) string    Remove(key string) bool}樹節(jié)點(diǎn)結(jié)構(gòu):type treeNode struct {    bigger           *treeNode    smaller          *treeNode    key              string    value            string}例子重新平衡前100(根) --> 150 --> 200重新平衡后100 <-- 150(根)--> 200賦值給 *n 后... 150 <-- 150 <-- 150 --> 200如何更改接收器類型而不獲取對(duì)其自身的循環(huán)引用?
查看完整描述

1 回答

?
拉丁的傳說

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊

你要改變的實(shí)際上是**n,所以它可以指向另一個(gè)節(jié)點(diǎn)。在當(dāng)前的范圍內(nèi)你不能這樣做。但是,您可以包裝該節(jié)點(diǎn)并將該節(jié)點(diǎn)設(shè)置在該方法之外,并讓該節(jié)點(diǎn)的方法返回一個(gè)根。


例如,


type tree struct {

    root *treeNode

}


func (t *tree) Remove(key string) bool {

    root,ok := t.root.Remove()

    t.root = root

    return ok

}

并更改*treeNode.Add為func (*treeNode) Add(string) *treeNode.


查看完整回答
反對(duì) 回復(fù) 2023-08-07
  • 1 回答
  • 0 關(guān)注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)