douzi0609 2017-11-09 07:18
浏览 34
已采纳

通过参考更改切片

I have the following code

type TreeNode struct {
    Val   int
    Left  *TreeNode
    Right *TreeNode
}

func binaryTreePaths(root *TreeNode) []string {
    paths := []string{}
    binaryTree(root, "", paths)
    return paths

}

func binaryTree(root *TreeNode, a string, paths []string) {

    if root == nil {
        return
    }

    if isLeaf(root) {
        paths = append(paths, a+strconv.Itoa(root.Val))
    }

    if root.Left != nil {
        binaryTree(root.Left, a+strconv.Itoa(root.Val)+"->", paths)
    }

    if root.Right != nil {
        binaryTree(root.Right, a+strconv.Itoa(root.Val)+"->", paths)
    }

}

func isLeaf(root *TreeNode) bool {

    if root == nil {
        return false
    }
    if root.Left == nil && root.Right == nil {
        return true
    }
    return false
}

My issue is that paths doesn't keep the value when the recursion stack is added/popped. But when I use maps that keys/values stay the same even after the function exits. How do I keep the values in paths after binaryTree finishes?

i.e This code prints out paths to leaves. Given the following tree

/*           1
           /   \
          2     3
           \
            5
*/

Answer should be {"1->2->5", "1->3"}

  • 写回答

1条回答 默认 最新

  • doupao6698 2017-11-09 07:25
    关注

    A slice contains a pointer to a backing array, length and capacity. Like all other types in Go, slices are passed by value.

    Change the function binaryTree to return the slice to the caller.

    func binaryTreePaths(root *TreeNode) []string {
        return binaryTree(root, "", nil)
    }
    
    func binaryTree(root *TreeNode, a string, paths []string) []string {
    
        if root == nil {
            return paths
        }
    
        if isLeaf(root) {
            paths = append(paths, a+strconv.Itoa(root.Val))
        }
    
        if root.Left != nil {
            paths =binaryTree(root.Left, a+strconv.Itoa(root.Val)+"->", paths)
        }
    
        if root.Right != nil {
            paths = binaryTree(root.Right, a+strconv.Itoa(root.Val)+"->", paths)
        }
        return paths
    }
    

    playground example

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥60 pb数据库修改或者求完整pb库存系统,需为pb自带数据库
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路