给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。
难度:🌟🌟🌟🌟
示例 1:

输入:root = [1,null,2,3]
输出:[1,3,2]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
提示:
中序遍历是指对树按照 左、根、右 的规律进行访问。
可以使用递归遍历,也可使用迭代遍历。
区别在于递归的时候隐式地维护了一个栈,而我们在迭代的时候需要显式地将这个栈模拟出来,其他都相同
// 递归遍历
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
}
// 迭代遍历
func inorderTraversal1(root *TreeNode) (res []int) {
if root == nil {
return nil
}
var stack []*TreeNode
for root != nil || len(stack) > 0 {
for root != nil {
stack = append(stack, root)
root = root.Left
}
// 此时 栈 中全是左节点
root = stack[len(stack)-1]
// 删除栈顶节点
stack = stack[:len(stack)-1]
res = append(res, root.Val)
root = root.Right
}
return res
}