func postorderTraversal(root *TreeNode) []int {
var stk []*TreeNode
p := root
var ans []int
var prev *TreeNode
for len(stk) > 0 || p != nil {
for p != nil {
stk = append(stk, p)
p = p.Left
}
p = stk[len(stk) - 1]
stk = stk[:len(stk) - 1]
if p.Right == nil || p.Right == prev {
ans = append(ans, p.Val)
prev = p
p = nil
} else {
stk = append(stk, p)
p = p.Right
}
}
return ans
}