既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
目录
一、二叉树迭代后续遍历需要思考的问题
二叉树的递归遍历,整体上都是一个结构套着出来的,就是打印根节点的位置不一样。就是递归左子树节点,打印根节点,递归右子树节点的组合。
根节点,在中间取值则是中序遍历。
func midRecur(root *TreeNode) []int {
var res []int
if root==nil {
return res
}
left := midRecur(root.Left)
val := root.Val
right := midRecur(root.Right)
res = append(res, left...)
res = append(res, val)
res = append(res, right...)
return res
}
二、🍻二叉树后序迭代遍历实现
后序迭代遍历的实现,其实就是手动模拟后续遍历二叉树的递归实现。但是这里面有一点小坑的就是,后续遍历二叉树是需要先把左右子树遍历完了,再访问根节点的值。这个时候就需要定义一个变量额外记录访问过的变量。
2.1🍺🍺🍺 二叉树定义
二叉树的定义是中规中矩喽~
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
2.2 🍖🍖🍖二叉树后续迭代遍历演化
这一块内容,就是逐步推演如何使用非递归遍历实现二叉树的后续。
2.2.1 一杆子捅到底
通过前面的二叉树后续递归遍历的代码,我们了解到二叉树的后续遍历,就是先访问左子树,再访问右子树。从结果上,我们也可以了解到首先打印的是最左边,最下面的节点。根据栈先进后出的特点,所以我们了解到要先把所有的最左侧的节点灌到栈里面。
func postIteration(root *TreeNode) []int {
l := list2.New()
back:=root
var res []int
for l.Len() != 0 || back != nil {
for back!=nil {
l.PushBack(back)
back=back.Left
}
element := l.Back() //取出栈顶元素
top := element.Value.(*TreeNode) //类型转换
}
return res
}
2.3 🍟🍟🍟栈顶出数,路在何方
上面的代码呢,我们已经最左侧的节点,都丢到栈里面了。丢完了以后呢,我们要取出来开始遍历数据了呢。首先呢,通过栈递归呢,我们知道,我们第一次取出的这个数据,是没有左子树的,但是可能有右子树。如果有右子树,那么右子树也需要入栈。如果没有右子树,这个节点的数据就可以取出并移除。
func postIteration(root *TreeNode) []int {
l := list2.New()
back:=root
var res []int
for l.Len() != 0 || back != nil {
for back!=nil {
l.PushBack(back)
back=back.Left
}
element := l.Back() //取出栈顶元素
top := element.Value.(*TreeNode) //类型转换
//右子树不为空,那么右子树也需要入栈
if top.Right!=nil {
![img](https://img-blog.csdnimg.cn/img_convert/43416105f001a3e91cb932b902ef5769.png)
![img](https://img-blog.csdnimg.cn/img_convert/881cf55751bb4be9e5b0b9e19aa0bc97.png)
![img](https://img-blog.csdnimg.cn/img_convert/1545833a80d0892f3ed223a3e7f4f289.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**
的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**