当前位置: 首页 > wzjs >正文

连云港网站关键词游戏公司排行榜前十名

连云港网站关键词,游戏公司排行榜前十名,pycharm 做网站哪个好,如何搭建一个自己的服务器LeetCode 94. 二叉树的中序遍历 这是一道非常基础的模版题,因此就不放出题目描述及输入输出示例和数据范围了。 在用 Golang 重新做这道题的时候,我发现了一个有关 slice 的问题,那就是 slice 类型作为形参时,由于我们已经知道 s…

LeetCode 94. 二叉树的中序遍历

在这里插入图片描述
这是一道非常基础的模版题,因此就不放出题目描述及输入输出示例和数据范围了。

在用 Golang 重新做这道题的时候,我发现了一个有关 slice 的问题,那就是 slice 类型作为形参时,由于我们已经知道 slice 类型是底层数组的一个视图,是引用类型,那么按理说对它在函数中进行的修改在函数返回时,它的传入实参也应该已经得到相应的修改。

但事实却与预期不符,如果直接以 slice 作为形参,那么无法返回正确的中序遍历结果:

// ❌ 无法得到预期的结果
/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func inorderTraverse(node *TreeNode, ans []int) {if node == nil {return}inorderTraverse(node.Left, ans)ans = append(ans, node.Val)inorderTraverse(node.Right, ans)
}func inorderTraversal(root *TreeNode) []int {ans := []int{}inorderTraverse(root, ans)return ans
}

但是当我把形参换位 slice 的指针之后,却能够得到正确的结果,这不禁引发了我的思考:既然 slice 已经是引用类型了,为什么还需要传入指针才能完成对实参的修改呢?

想要回答这个问题,我们需要首先回顾 Golang slice 的底层原理。Golang 的 slice 有三个字段,分别是 unsafe.Pointer,指向底层数组,以及 lencap,分别表示当前 slice 的长度以及容量。

因此如果我们朴素地传入一个 slice,并且在函数中调用了 append,那么很有可能 slice 的 lencap 会在函数中被修改,而由于 Golang 只有传值调用,我们传入的 slice 当中只有 unsafe.Pointer 字段指向底层数组的地址,但 lencap 字段是从函数外部通过调用复制进来的。所以在函数内部,底层数组当中的值确实被修改了,函数内部复制的 slice 的 lencap 也被修改了,但是 lencap 的修改对外部不可见。

综上,如果我们传值调用一个 slice 类型,那么它的 lencap 字段仍然是复制进函数的,函数内部对 lencap 的修改与外部实参无关。

所以如果我们想要使用 ans 这个 slice 保存正确的结果,应该传入 slice 的指针:

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func inorderTraverse(node *TreeNode, ans *[]int) {if node == nil {return}inorderTraverse(node.Left, ans)*ans = append(*ans, node.Val)inorderTraverse(node.Right, ans)
}func inorderTraversal(root *TreeNode) []int {ans := []int{}inorderTraverse(root, &ans)return ans
}
http://www.dtcms.com/wzjs/561913.html

相关文章:

  • 湖南株洲建设局网站网站建设前期目标
  • 怎样做淘宝的导购网站推广如何免费建立一个自己的网站
  • 和平网站建设公司域名管理
  • 各省网站备案时长南昌所有建设工程网站
  • 全屏网站模板想搞一个自己的网站怎么做
  • wordpress评论提交特效废品回收网站怎么做网站优化
  • 扁平式风格网站网站建设与维护目录
  • 潍坊市城市建设官网站搜索引擎营销是指
  • 怎么样查询网站被挂黑链蚌埠网站制作公司哪家好
  • 小程序怎么做优惠券网站网站空间在线解压
  • 黄岛网站建设公司哪家好开网店的流程及程序
  • 英文学习网站wordpress搜索错误
  • 网站建设的整个过程展览公司网站模板
  • 2015做外贸网站好做吗wordpress 查看全文
  • 温州集团网站建设温州通告最新
  • 在线阅读小说网站怎么做网站域名后缀有什么用
  • dede网站模板怎么安装教程网站的制作哪家好
  • 新彊生产建设兵团网站网络营销外包公司的评价
  • 网站策划书范文模板wordpress文件读取漏洞
  • jn建站系统官网wordpress 验证码插件
  • 网站建设相关优化青浦网站建设
  • 秦皇岛网站建设哪家好免费logo设计网址
  • 厦门网站建设屈兴东网络营销模式课
  • 库存网站建设定制北京网站开发公司飞沐
  • 北京网站推广排名外包青岛标志设计公司
  • 厦门网站建设制作多少钱和动物做的网站吗
  • 合肥的网站建设公司国外手机模板网站推荐
  • 汉中做网站的公司电话余姚网
  • 织梦网站做seo优化变装改造wordpress
  • 做网站美工的前途怎么样装潢公司网站模板