给定一个二叉树,返回它的中序 遍历。
package main
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func main() {
left3 := TreeNode{3,nil, nil}
right1 := TreeNode{2, &left3 , nil}
root := TreeNode{1, nil, &right1}
// 递归中序遍历 左根右
res := inorderTraversal(&root)
for _,v := range res {
println(v, " ")
}
// 非递归中序遍历
NONres := NONinorderTraversal(&root)
for _,v := range NONres {
println(v, " ")
}
}
func inorderTraversal(root *TreeNode) []int {
if root == nil {
return []int{}
}
if root.Left == nil && root.Right == nil {
return []int{root.Val}
}
rest := append(inorderTraversal(root.Left), root.Val)
rest = append(rest, inorderTraversal(root.Right)...)
return rest
}
func NONinorderTraversal(root *TreeNode) []int {
stack := []*TreeNode{}
res := []int{}
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
}