给定一棵二叉树,返回齐自底向上的层序遍历。
数据范围:二叉树上节点数满足
,二叉树上的值满足 
样例图:
package main
import _"fmt"
import . "nc_tools"
/*
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型二维数组
*/
func levelOrderBottom( root *TreeNode ) [][]int {
ans:=[][]int{[]int{root.Val}}
q:=[]*TreeNode{root}
for len(q)>0{
new_q:=[]*TreeNode{}
vals:=[]int{}
for _,qi:=range q{
if qi.Left!=nil{
new_q=append(new_q,qi.Left)
vals=append(vals,qi.Left.Val)
}
if qi.Right!=nil{
new_q=append(new_q,qi.Right)
vals=append(vals,qi.Right.Val)
}
}
if len(vals)>0{
ans=append([][]int{vals},ans...)
}
q=new_q
}
return ans
} func levelOrderBottom( root *TreeNode ) (result [][]int) {
var dfs func(*TreeNode, int)
dfs = func(node *TreeNode, level int) {
if node == nil {return}
if len(result) == level {
result = append(result, []int{})
}
result[level] = append(result[level], node.Val)
dfs(node.Left, level+1)
dfs(node.Right, level+1)
}
dfs(root, 0)
//翻转数组
for l, r := 0, len(result)-1; l < r; {
result[l], result[r] = result[r], result[l]
l++; r--
}
return
}