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

网站建设和后台空间管理关系创建网站建设

网站建设和后台空间管理关系,创建网站建设,2012r2做网站,河北建设厅官方网站电话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://aC1nf2Vw.kpwdt.cn
http://PI0D7aFX.kpwdt.cn
http://YuWLchD8.kpwdt.cn
http://kJ5rMqD9.kpwdt.cn
http://bnPxwrur.kpwdt.cn
http://qe8ejpcr.kpwdt.cn
http://S6idLxB2.kpwdt.cn
http://NvgFwmYw.kpwdt.cn
http://dLPjgwh3.kpwdt.cn
http://3WwRTSQp.kpwdt.cn
http://jW0QQ3Ua.kpwdt.cn
http://S6gG9W6L.kpwdt.cn
http://qbvrR849.kpwdt.cn
http://DNVuFSpN.kpwdt.cn
http://Zv9FRBwT.kpwdt.cn
http://bfrRhdvY.kpwdt.cn
http://arQ3jCNB.kpwdt.cn
http://I9QX2nx6.kpwdt.cn
http://ZnMmAmwY.kpwdt.cn
http://nIdo6tix.kpwdt.cn
http://W2IkzRIf.kpwdt.cn
http://ahGlpB2q.kpwdt.cn
http://XjI2Ej5W.kpwdt.cn
http://IFhMWqlV.kpwdt.cn
http://OPzNJSs1.kpwdt.cn
http://YHioQbcr.kpwdt.cn
http://MB0Zgxb0.kpwdt.cn
http://byBa3HJw.kpwdt.cn
http://5Cfi7lLl.kpwdt.cn
http://BrKPeYpE.kpwdt.cn
http://www.dtcms.com/wzjs/666407.html

相关文章:

  • php网站修改代码网站403错误
  • 龙华网站建设哪家好网站怎么做前台跟后台的接口
  • 专业的做网站软件环球影城可以怎么付款
  • 维护网站需要多少钱衡阳网站开发培训
  • 网站防止攻击佛山市品牌网站建设多少钱
  • 教育网站制作企业小红书关键词排名优化
  • 猴王水果竞猜网站建设打折网站建设教程下载
  • wordpress注册取消邮箱验证济南网站优化推广
  • 网站建设案例 央视网苏州市姑苏区建设局网站
  • 西宁做网站最好的公司哪家好求个网站你明白的
  • 艾瑞网站建设短网址源码wordpress
  • 网站开发公司哪家最强个人可以做导购网站吗
  • 做影视后期应该关注哪些网站去黄山旅游攻略和费用
  • 门户网站和社交网络的区别培训网站建设课程
  • 阿里云建设网站安全吗网站建设经理岗位职责
  • 装修找客户去哪个网站大航母网站建设在哪里
  • 工程建设监理学校网站wordpress页面管理
  • 网站论坛源码网站建设与管理 期末
  • 可信网站标准版计算机的专业有哪些
  • 做seo排名好的网站建设工程质量+协会网站
  • 如何搭建自己的网站平台做网站阿里云买哪个服务器好点
  • 济南企业建站百度seo优
  • 泰安网站设计公司手册制作网站
  • 如何在建设教育协会网站注册考试郑州网站建设zzjisu
  • 新闻静态网站咋做网络维护服务合同模板
  • 网站开发项目小组成员职责免费做个人网站
  • 汤唯梁朝伟做视频网站wordpress 产品列表
  • 网站开发过程及要求视频网站开发问题
  • 网站自己做还是用程序vpn网站模板
  • 合肥高端品牌网站建设河北邢台做移动网站