107. 二叉树的层序遍历 II
给你二叉树的根节点 root
,返回其节点值 自底向上
的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[15,7],[9,20],[3]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
提示:
- 树中节点数目在范围 [0, 2000] 内
- -1000 <= Node.val <= 1000
解题思路
经典的层序遍历,不过遍历完后,将保存各层结果的二维切片,行维度翻转一下,即最后一行作为第一行,第一行作为最后一行即可。
Go代码
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func levelOrderBottom(root *TreeNode) [][]int {
// 和102题一样,就是普通的层序遍历,不过遍历完成后,结果需要倒序一下
if root == nil {
return [][]int{}
}
res := make([][]int,0)
queue := make([]*TreeNode,0)
queue = append(queue,root)
for len(queue) > 0 {
queueSize := len(queue)
curLevelRes := make([]int,0)
for i := 0;i < queueSize;i++{
curNode := queue[0]
queue = queue[1:]
curLevelRes = append(curLevelRes,curNode.Val)
if curNode.Left != nil {
queue = append(queue,curNode.Left)
}
if curNode.Right != nil {
queue = append(queue,curNode.Right)
}
}
res = append(res,curLevelRes)
}
// 反转结果
left := 0
right := len(res)-1
for left < right {
res[left],res[right] = res[right],res[left]
left++
right--
}
return res
}