leetcode107二叉树的层次遍历II

leetcode 107 Binary Tree Level Order Traversal II

Posted by BY on July 2, 2020

前言

持续更新了

正文

问题来源

本问题来自leetcode上的107题。

问题描述

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

例如:
给定二叉树 [3,9,20,null,null,15,7]

示例 1:

    3
   / \
  9  20
    /  \
   15   7

返回其自底向上的层次遍历为:

[
  [15,7],
  [9,20],
  [3]
]

分析:

参考leetcode102。

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func levelOrderBottom(root *TreeNode) [][]int {
    if root == nil {
        return nil
    }
    res := make([][]int, 0)
    queue := append([]*TreeNode{}, root)
    for 0 != len(queue) {
        tmpQueue := make([]*TreeNode, 0)
        tmp := make([]int, 0, len(queue))
        for i := 0; i < len(queue); i++ {
            n := queue[i]
            tmp = append(tmp, n.Val)
            if n.Left != nil {
                tmpQueue = append(tmpQueue, n.Left)
            }
            if n.Right != nil {
                tmpQueue = append(tmpQueue, n.Right)
            }
        }
        queue = tmpQueue
        res = append(res, tmp)
    }
    //fmt.Println(res)
    i, j := 0, len(res)-1
    for i < j {
        res[i], res[j] = res[j], res[i]
        i++
        j--
    }
    return res
}

总结:

勤思考。

结语

不管怎么样好好加油。