方法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:非递归版
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
}
return result
}