Leetcode 145.二叉树的后序遍历

12 阅读1分钟

题目

image.png

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
}

思路

我们注意到后序遍历的顺序是 左->右->根

如果将他反过来,就会变成 根->右->左

而前序遍历的顺序是 根->左->右,

我们将前序遍历做一个调整变成先左子树入栈,然后右子树入栈后顺序就能变成 根->右->左,最后的结果如果翻转,就的到了想要的左->右->根