先分层遍历,再对结果进行翻转
func levelOrderBottom( root *TreeNode ) [][]int {
// write code here
if root == nil {
return nil
}
ret := make([][]int, 0)
stack := []*TreeNode{root}
// 先分层遍历
for len(stack) >0 {
size := len(stack)
tmp := make([]int, 0, size)
for i:=0; i< size; i++{
node := stack[i]
tmp = append(tmp, node.Val)
if node.Left != nil {
stack = append(stack, node.Left)
}
if node.Right != nil {
stack = append(stack, node.Right)
}
}
stack = stack[size:]
ret = append(ret, tmp)
}
// 最后对结果进行翻转
if len(ret) > 0 {
for i, j := 0, len(ret)-1; i<j; i,j = i+1, j-1 {
ret[i], ret[j] = ret[j], ret[i]
}
}
return ret
} 
京公网安备 11010502036488号