tips:
中
/ \
左 右
前序遍历:中,左,右
中序遍历:左,中,右
后序遍历:左,右,中
本题需要中序遍历。
栈是一种 先进后出
的结构,出栈顺序为左,中,右
那么入栈顺序必须调整为倒序,也就是右,中,左
同理,如果是前序遍历,入栈顺序为 右,左,中
;后序遍历,入栈顺序中,右,左,
如果是前序遍历,入栈顺序为右,中,左,出栈顺序为左,中,右
DFS:深度优先搜索
法一:迭代
解题思路:
func main(){
root:=createTree(0,[]int{1,2,3,4,5,6})
ans9:=inorderTraversal1(root)
fmt.Println(ans9)
}
//用数组按层序建立二叉树
func createTree(index int,nums []int) *TreeNode {
if index >= len(nums) {
return nil
}
root := &TreeNode{
Val: nums[index],
}
root.Left = createTree(index*2+1, nums)
root.Right = createTree(index*2+2, nums)
return root
}
//二叉树的中序遍历
func inorderTraversal1(root *TreeNode)[]int{
res:=[]int{}
stack:=[]*TreeNode{}
for root != nil{
stack=append(stack,root)
root=root.Left
}
for len(stack)!=0{
node:=stack[len(stack)-1]
stack=stack[:len(stack)-1]
res=append(res,node.Val)
node=node.Right
for node!=nil{
stack=append(stack,node)
node=node.Left
}
}
return res
}