Input: root = [1,null,2,3]
Output:
[3,2,1]
Input: root = []
Output:
[]
Input: root = [1]
Output:
[1]
/**
* Definition for a binary tree node .
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func postorderTraversal(root *TreeNode) []int {
res := make([]int, 0)
var helper func(*TreeNode)
helper = func(root *TreeNode) {
if root == nil { return }
helper(root.Left)
helper(root.Right)
res = append(res, root.Val)
}
helper(root)
return res
}
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func postorderTraversal(root *TreeNode) []int {
ans := make([]int, 0)
if root == nil { return ans }
stack := make([]*TreeNode, 0)
stack = append(stack, root)
for len(stack) > 0 {
node := stack[len(stack)-1]
if node.Right == nil && node.Left == nil {
stack = stack[:len(stack)-1]
ans = append(ans, node.Val)
}
if node.Right != nil {
stack = append(stack, node.Right)
node.Right = nil
}
if node.Left != nil {
stack = append(stack, node.Left)
node.Left = nil
}
}
return ans
}