力扣第94题Golang答案 二叉树的中序遍历

方法1:递归版

// 方法1:递归版中序遍历
func inorderTraversal1(root *TreeNode) []int {
	// 创建数组,用于存放结果
	var result []int
	
	// 创建递归函数,用于实现递归遍历,通过中序遍历生成数组
	var recursive func(node *TreeNode)
	recursive = func(node *TreeNode) {
		if node == nil {
			return
		}
		
		// 中序遍历:左根右
		recursive(node.Left)
		result = append(result, node.Val)
		recursive(node.Right)
	}
	
	// 调用递归函数
	recursive(root)
	
	// 返回数组
	return result
}

方法2:非递归版


// 方法2:非递归版中序遍历
func inorderTraversal(root *TreeNode) []int {
	// 创建数组,用于存放结果
	var result []int
	
	// 创建栈,模拟递归
	var stack []*TreeNode
	
	// 创建指针,指向根节点
	var p = root
	
	// 当栈有值或者指针有值的时候,循环
	for len(stack) > 0 || p != nil {
		// 将左子树加入栈
		for p != nil {
			stack = append(stack, p)
			p = p.Left
		}
		
		var node = stack[len(stack)-1] // 栈先进后出的特点,根节点会最后弹出
		stack = stack[:len(stack)-1]
		result = append(result, node.Val)
		
		// 遍历右子树
		p = node.Right // 本来p是没有值的,但是到了根节点这里以后,又重新有值了
	}
	
	// 返回数组
	return result
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python私教

创业不易,请打赏支持我一点吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值