题目一
leecode 94. 二叉树的中序遍历
给定一个二叉树的根节点 root ,返回它的 中序 遍历。
 

输入:root = [1,null,2,3]
输出:[1,3,2]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
示例 4:
输入:root = [1,2]
输出:[2,1]
示例 5:
输入:root = [1,null,2]
输出:[1,2]
 
提示:
树中节点数目在范围 [0, 100] 内
-100 <= Node.val <= 100
首先我们需要了解什么是二叉树的中序遍历:按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过程天然具有递归的性质,我们可以直接用递归函数来模拟这一过程。
参考代码
定义一颗树
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int          // 根
 *     Left *TreeNode   //左节点
 *     Right *TreeNode  //右节点
 * }
 */
复制代码GO语言版 递归
func inorderTraversal(root *TreeNode) (res []int) {
	var inorder func(node *TreeNode)
	inorder = func(node *TreeNode) {
		if node == nil {
			return // 结束当前递归
		}
		inorder(node.Left) // 直接怼到左边最下边
		res = append(res, node.Val) // 添加到数组里
		inorder(node.Right) // 看右边还有没有分支,有就继续走,没有就将右节点加入数组
	}
	inorder(root)
	return
}
复制代码GO语言版 迭代 栈:先进后出
定义一个栈,栈存的就是一棵树
1.先将整颗树怼进去,在把所有的左子树怼进去
2.遍历左子树,直接左边的最下边
3.因为先进后出,拿到了最下面的左节点
4.怼到数组里
5.看以右节点为根的还有没有左节点,有就回到上面第1步,没有就走第3步,把根节点怼进去,在怼右节点。
func inorderTraversal(root *TreeNode) (res []int) {
	stack := []*TreeNode{}    // 定义一个栈,栈存的就是一棵树
	for root != nil || len(stack) > 0 {
		for root != nil {
			stack = append(stack, root)  // 1.先将整颗树怼进去,在把所有的左子树怼进去
			root = root.Left   // 2.遍历左子树,直接左边的最下边
		}
		root = stack[len(stack)-1]  // 3.因为先进后出,拿到了最下面的左节点
		stack = stack[:len(stack)-1]
		res = append(res, root.Val) // 4.怼到数组里
                //5.看以右节点为根的还有没有左节点,有就回到上面第1步,没有就走第3步,把根节点
		root = root.Right // 
	}
	return
}
复制代码真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话
求点赞? 求关注❤️ 求分享? 对8块腹肌的我来说真的 非常有用!!!
如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
    






















![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)
