二叉树前序遍历递归实现时,作为参数的slice会在同级节点那里的值被覆盖而不是增加。是什么问题?如代码

tomleoken · · 865 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

** tree包** ``` package tree import ( "log" ) // Binary Tree type BinaryTree struct { Data interface{} Left *BinaryTree Right *BinaryTree } // 先序遍历 - 递归 func (bt *BinaryTree)PreOrderRec(v []interface{}) { if bt == nil { return } log.Println("current data :",bt.Data) v = append(v,bt.Data) log.Println("v : ",v) bt.Left.PreOrderRec(v) bt.Right.PreOrderRec(v) } ``` ** main 包 ** ``` package main import( "tree" "log" ) func main() { //创建一颗树 root := tree.BinaryTree{"A", nil, nil} root.Left = &tree.BinaryTree{Data:"B"} root.Right = &tree.BinaryTree{Data:"C"} root.Left.Left = &tree.BinaryTree{Data:"D"} root.Left.Right = &tree.BinaryTree{Data:"F"} root.Left.Right.Left = new(tree.BinaryTree) root.Left.Right.Left.Data = "E" root.Right.Left = &tree.BinaryTree{Data:"G"} root.Right.Left.Right = &tree.BinaryTree{Data:"H"} root.Right.Right = &tree.BinaryTree{Data:"I"} str := make([]interface{},0) root.PreOrderRec(str) log.Println(str) } ``` **输出的str结果** ``` 2019/08/21 23:23:28 current data : A 2019/08/21 23:23:28 v : [A] 2019/08/21 23:23:28 current data : B 2019/08/21 23:23:28 v : [A B] 2019/08/21 23:23:28 current data : D 2019/08/21 23:23:28 v : [A B D] 2019/08/21 23:23:28 current data : F 2019/08/21 23:23:28 v : [A B F] 2019/08/21 23:23:28 current data : E 2019/08/21 23:23:28 v : [A B F E] 2019/08/21 23:23:28 current data : C 2019/08/21 23:23:28 v : [A C] 2019/08/21 23:23:28 current data : G 2019/08/21 23:23:28 v : [A C G] 2019/08/21 23:23:28 current data : H 2019/08/21 23:23:28 v : [A C G H] 2019/08/21 23:23:28 current data : I 2019/08/21 23:23:28 v : [A C I] 2019/08/21 23:23:28 [] ``` **从输出结果来看,参数传递是值类型的,所以下层函数的改变无法影响到上级函数。但是slice不是引用类型的么。参数传递过程中理论上下层函数对其更改是可以影响到上层函数的吧**

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

865 次点击  
加入收藏 微博
4 回复  |  直到 2019-08-22 16:27:46
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传