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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在最小堆二叉樹中使用遞歸搜索和返回節(jié)點

在最小堆二叉樹中使用遞歸搜索和返回節(jié)點

Go
狐的傳說 2022-11-23 19:16:57
所以我試圖通過索引檢索最小堆樹中的節(jié)點。調(diào)用它的方式是我會啟動一個空的 MinHeapNode 結(jié)構(gòu)并通過它的值傳遞,&node以便在遞歸函數(shù)調(diào)用之間,如果找到匹配項,它將返回。然而,即使給出找到的結(jié)果,新分配的空節(jié)點似乎也會被另一個具有該節(jié)點空版本的遞歸調(diào)用覆蓋。我仍然習慣了指針和地址的想法,所以我相信傳遞值地址可以解決這個問題,因為它會在調(diào)用之間的相同地址調(diào)用相同的值。但顯然這是不正確的。type MinHeapNode struct {    Parent *MinHeapNode    Left   *MinHeapNode    Right  *MinHeapNode    Value  int    Index  int}func (MHN *MinHeapNode) Insert(value int) {    if !MHN.hasLeftChild() {        MHN.Left = &MinHeapNode{Parent: MHN, Value: value}        return    }    if !MHN.hasRightChild() {        MHN.Right = &MinHeapNode{Parent: MHN, Value: value}        return    }    if MHN.hasLeftChild(){        MHN.Left.Insert(value)        return    }    if MHN.hasRightChild(){        MHN.Right.Insert(value)        return    }}func (MHN *MinHeapNode) setIndex(count *int){    index := *count    *count = *count +1    MHN.Index = index    if MHN.hasLeftChild(){        MHN.Left.setIndex(count)    }        if MHN.hasRightChild(){        MHN.Right.setIndex(count)    }    }func (MHN *MinHeapNode) getIndex(index int, node *MinHeapNode){    if MHN == nil{        return    }    if MHN.Index == index{        node = MHN        return    }        MHN.Left.getIndex(index, node)        MHN.Right.getIndex(index,node)    }}type MinHeapTree struct {    Root MinHeapNode    Size int}func (MHT *MinHeapTree) getIndex(index int)(*MinHeapNode, error){    if MHT.Size < index +1 {        err := fmt.Errorf("index exceeds tree size")        return nil, err    }     var node MinHeapNode    MHT.Root.getIndex(index, &node)    return &node, nil}
查看完整描述

1 回答

?
哆啦的時光機

TA貢獻1779條經(jīng)驗 獲得超6個贊

您面臨的問題似乎與中的聲明node = MHN有關(guān)getIndex(但由于您的代碼不完整,我無法確認這是否是唯一的問題)。


node = MHN將更新node(一個參數(shù),所以按值傳遞,它的作用域是函數(shù)體)的值。MinHeapNode這對函數(shù)node開頭指向的值沒有影響。糾正這個用法*node = *MHN。


這可以用一個簡單的程序(操場)來演示


type MinHeapNode struct {

    Test string

}


func getIndexBad(node *MinHeapNode) {

    newNode := MinHeapNode{Test: "Blah"}

    node = &newNode

}


func getIndexGood(node *MinHeapNode) {

    newNode := MinHeapNode{Test: "Blah"}

    *node = newNode

}

func main() {

    n := MinHeapNode{}

    fmt.Println(n)

    getIndexBad(&n)

    fmt.Println(n)

    getIndexGood(&n)

    fmt.Println(n)

}

輸出表明“壞”函數(shù)不會更新傳入的node:


{}

{}

{Blah}


查看完整回答
反對 回復(fù) 2022-11-23
  • 1 回答
  • 0 關(guān)注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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