2 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
切片保存對(duì)底層數(shù)組的引用,如果將一個(gè)切片分配給另一個(gè)切片,則兩者都引用同一個(gè)數(shù)組。如果一個(gè)函數(shù)接受一個(gè)切片參數(shù),它對(duì)切片元素所做的更改將對(duì)調(diào)用者可見(jiàn)
PreorderRecursion不應(yīng)接受切片并對(duì)其進(jìn)行更改。這是一種方法。
func PreorderRecursion(root *TreeNode) []int {
? ? if root == nil {
? ? ? ? return nil
? ? }
? ? result := append([]int{}, root.Val)
? ? res1 := PreorderRecursion(root.Left)
? ? res2 := PreorderRecursion(root.Right)
? ? result = append(result, res1...)
? ? result = append(result, res2...)
? ? return result
}

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊
問(wèn)題源于您將result
切片傳遞給遞歸調(diào)用。因此,每個(gè)遞歸調(diào)用都會(huì)附加上面節(jié)點(diǎn)的結(jié)果。你期望1 2 4 3
,但是你1
從第一個(gè)電話中得到,然后1 2
(而不是只是2
)從第二個(gè)電話中得到,然后1 2 4
(而不是只是4
)從第三個(gè)電話中得到。
要解決此問(wèn)題,您只需刪除將結(jié)果切片傳遞給遞歸函數(shù)即可。該函數(shù)應(yīng)該只為它所在的節(jié)點(diǎn)加上它的后代樹創(chuàng)建一個(gè)結(jié)果切片,它不需要知道父節(jié)點(diǎn)的結(jié)果是什么。
- 2 回答
- 0 關(guān)注
- 147 瀏覽
添加回答
舉報(bào)