二叉树的中序遍历golang版本

2023-08-20
1分钟阅读时长

二叉树的中序遍历golang版本

一种是递归的方式,一种是通过定义stack也就是栈数据结构 stack := make([]*TreeNode,0). 这里的解决思路,就是把左子树上所有节点都放到stack中,因为中序遍历是先来左子树,再来右子树,所以,处理完左子树,就搞右子树,并且是在循环里面,所以左子树循环追加进去的值,要不断的取出,放到输出结果里,并且左边搞完,搞右边,stack,并且是从小的二叉树,到大的二叉树,虽然树的层数不同,但是每次都在for循环的时候,把左子支右子支都穷尽了

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

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

func inorderTraversal(root *TreeNode) []int {
	valueList := make([]int, 0)
	stack := make([]*TreeNode, 0)
	curNode := root
	for curNode != nil || len(stack) > 0 {
		for curNode != nil {
			stack = append(stack, curNode)
			curNode = curNode.Left
		}
		top := stack[len(stack)-1]
		stack = stack[0 : len(stack)-1]
		valueList = append(valueList, top.Val)
		curNode = top.Right
	}
	return valueList
}

func inorderTraversal(root *TreeNode) []int {
	valueList := make([]int, 0)
	if root == nil {
		return valueList
	}
	inorderTraversal(root.Left)
	valueList = append(valueList, root.Val)
	inorderTraversal(root.Right)
	return valueList
}

本主题指南

技术实践与开发文档
  • 深入探究一下Kubernetes Operator Pattern,为CustomResourceDefinition使用贡献有效经验

    Kubernetes让部署和无感知扩容变的异常简单。如果实操,基本上只需要在YAML文件中把相关联的应用的参数做下指定即可,然后提交给Kubernetes系统识别你的声明式指令,Kubernetes内建的状态循环机制就会自动的创建或者销毁相应资源,来把集群调整到我预设的状态上来,一切都如此轻松!

  • 如何从头创建一个KubernetesOperator

    对于什么是`controller`什么是`operator`可能大家有比较多的迷惑,特别对于你不是做`Kubernetes`领域相关工作的,可能就更像听天书。简明扼要给出我的理解,`operators`是一种特别的`controller`。区别在于`operators`中针对于`controller`可能会包含进更多特定的负载相关的知识。 那么下个问题就出现了,什么是`controller`?

  • Client Go四种交互模式之 DynamicClient实战案例详解

    Client Go四种交互模式之 DynamicClient实战案例详解

  • 对于kubernetes体系课的录制自己的一些思考

    由于天天要搞的事情太多,所以准备录云原生kubernetes课程的事情一拖再拖!但好消息是这个周末终于录了网络接口(CNI)第三方厂商中的佼佼者flannel和calico的实践!以及istio的实践!虽然都只是一部分,但是能迈出这一步,感觉已经是巨大的进步了,因为如果找借口可能天天都有借口,但是时间嘛,挤一挤总是有的!

Avatar

Aisen

Be water,my friend.