题目
26年5月19日(首刷看解)
func inverse(ret []int) []int{
left:=0
right:=len(ret)-1
for left<right {
tmp:=ret[left]
ret[left]=ret[right]
ret[right]=tmp
left++
right--
}
return ret
}
func postorderTraversal(root *TreeNode) []int {
if root==nil{
return []int{}
}
ret:=[]int{}
stack:=[]*TreeNode{root}
for len(stack)>0{
node:=stack[len(stack)-1]
stack=stack[:len(stack)-1]
ret=append(ret,node.Val)
if node.Left!=nil{
stack=append(stack,node.Left)
}
if node.Right!=nil{
stack=append(stack,node.Right)
}
}
ret=inverse(ret)
return ret
}
思路
我们注意到后序遍历的顺序是 左->右->根
如果将他反过来,就会变成 根->右->左
而前序遍历的顺序是 根->左->右,
我们将前序遍历做一个调整变成先左子树入栈,然后右子树入栈后顺序就能变成 根->右->左,最后的结果如果翻转,就的到了想要的左->右->根