107 二叉树的层序遍历2-中等

题目:

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

分析:

这里先正常层序遍历,然后再将结果集反转一下。【推荐该算法】

想了下,暂时没有比这更好的算法,因为向数组的头部插入数据,涉及拷贝,所以并不能够将每一层的结果一次性放入指定位置。

// date 2023/10/23
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func levelOrderBottom(root *TreeNode) [][]int {
    res := make([][]int, 0, 16)
    if root == nil {
        return res
    }

    queue := make([]*TreeNode, 0, 16)
    queue = append(queue, root)
    
    for len(queue) != 0 {
        n := len(queue)

        lRes := make([]int, 0, 16)
        for i := 0; i < n; i++ {
            cur := queue[i]
            lRes = append(lRes, cur.Val)

            if cur.Left != nil {
                queue = append(queue, cur.Left)
            }
            if cur.Right != nil {
                queue = append(queue, cur.Right)
            }
        }
        res = append(res, lRes)
        queue = queue[n:]
    }

    i, j := 0, len(res)-1
    for i < j {
        res[i], res[j] = res[j], res[i]
        i++
        j--
    }

    return res
}

最后更新于