给定一个二叉树的根节点 root ,返回它的 中序 遍历。
示例 1:
输入: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
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
解法一:递归
func inorderTraversal(root *TreeNode) []int {res := []int{}var inorder func(root *TreeNode)inorder = func(root *TreeNode) {if root == nil {return}inorder(root.Left)res = append(res, root.Val)inorder(root.Right)}inorder(root)return res}
解法二:迭代
中序:左、根、右
需要借助 栈 来实现。
对于每个节点 A, 我们需要先将 A 入栈,然后遍历其左子树,接着访问 A,最后再遍历右子树。
所以就是 A 入栈,A 的左节点入栈(直到没有左节点为止),栈顶出栈且栈顶的右节点入栈
func inorderTraversal(root *TreeNode) []int {res := []int{}stack := []*TreeNode{}top := rootfor len(stack) > 0 || top != nil {for root != nil {stack = append(stack, top)top = top.Left}top, stack = stack[len(stack)-1], stack[:len(stack)-1]res = append(res, top.Val)top = top.Right}return res}
