2 回答

TA貢獻1851條經驗 獲得超4個贊
切片保存對底層數組的引用,如果將一個切片分配給另一個切片,則兩者都引用同一個數組。如果一個函數接受一個切片參數,它對切片元素所做的更改將對調用者可見
PreorderRecursion不應接受切片并對其進行更改。這是一種方法。
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貢獻1876條經驗 獲得超7個贊
問題源于您將result
切片傳遞給遞歸調用。因此,每個遞歸調用都會附加上面節點的結果。你期望1 2 4 3
,但是你1
從第一個電話中得到,然后1 2
(而不是只是2
)從第二個電話中得到,然后1 2 4
(而不是只是4
)從第三個電話中得到。
要解決此問題,您只需刪除將結果切片傳遞給遞歸函數即可。該函數應該只為它所在的節點加上它的后代樹創建一個結果切片,它不需要知道父節點的結果是什么。
- 2 回答
- 0 關注
- 141 瀏覽
添加回答
舉報