【已解决】LeetCode,第 144 题,二叉树前序遍历的疑惑

quanquan616 · · 1071 次点击
感谢 <a href="/user/zerolinck" title="@zerolinck">@zerolinck</a> 大佬的指点,终于把问题想明白了。 在【提交】代码时,LeetCode 会把测试用例 `[1, null, 2, 3]` 执行一遍,等下一次再跑其他测试用例时,仍旧在使用这个全局变量的切片。如果继续跑下去,所有的结果都会往这个全局切片的后面追加,最终导致结果与预期不符。 最终实现的代码如下: 闭包中局部变量的方式: ```go func preorderTraversal(root *TreeNode) []int { var res []int var prev func(node *TreeNode) prev = func(node *TreeNode) { if node == nil { return } res = append(res, node.Val) prev(node.Left) prev(node.Right) } prev(root) return res } ``` 全局变量方式: ```go var res []int func prev(node *TreeNode) { if node == nil { return } res = append(res, node.Val) prev(node.Left) prev(node.Right) } func preorderTraversal(root *TreeNode) []int { res = make([]int, 0) prev(root) return res } ```
#3
更多评论
var res []int 这里定义了全局变量 preorderTraversal在提交时会被多次运行,第一次运行完后,第二次再运行,全局变量并没有没初始化
#1
非要使用全局变量加递归的方法的话,再写一个方法,把处理逻辑放到新的方法在,然后在 preorderTraversal 中初始化 res 切片,就不会出现这个问题了
#2