题目描述
给定一个二叉树的根节点 root ,返回它的 中序 遍历。
方法一:递归
解题思路
- 中序遍历,先添加左子树返回值,再添加根节点的值,最后添加右子树的返回值
代码实现
func inorderTraversal(root *TreeNode) []int {
var res []int
if root == nil {
return res
}
res = append(res, inorderTraversal(root.Left)...)
res = append(res, root.Val)
res = append(res, inorderTraversal(root.Right)...)
return res
}
方法二:迭代
解题思路
- 当前节点不为空,或者队列中元素不为空,继续遍历
- 一路向左,直到为空
- 出队列且保存该节点的值,访问其右节点
代码实现
func inorderTraversal(root *TreeNode) []int {
var res []int
queue := make([]*TreeNode, 0)
for root != nil || len(queue) > 0{
for root != nil {
queue = append(queue, root)
root = root.Left
}
node := queue[len(queue)-1]
queue = queue[:len(queue)-1]
res = append(res, node.Val)
root = node.Right
}
return res
}