515. 在每个树行中找最大值 中等

您需要在二叉树的每一行中找到最大的值。

示例:

输入: 

          1
         / \
        3   2
       / \   \  
      5   3   9 

输出: [1, 3, 9]

代码参考:

package main

import (
    "fmt"
    "sort"
)

func main() {
    root := &TreeNode{Val: 1}
    root.Left = &TreeNode{Val: 3}
    root.Right = &TreeNode{Val: 2}
    root.Left.Left = &TreeNode{Val: 5}
    root.Left.Right = &TreeNode{Val: 3}
    root.Right.Right = &TreeNode{Val: 9}

    //             1
    //         / \
    //        3   2
    //       / \   \
    //      5   3   9
    fmt.Println(largestValues(root)) // [1 3 9]
}

func largestValues(root *TreeNode) []int {
    var levels [][]int
    var traverse func(root *TreeNode, curLevel int)

    // 和 102 一样的层序遍历
    // 递归和 queue 都 ok
    traverse = func(root *TreeNode, curLevel int) {
        if root == nil {
            return
        }

        // 到了新一层
        if curLevel >= len(levels) {
            levels = append(levels, []int{})
        }
        // 注意此处 levels 直接使用的外部变量,传 *[][]int 参数无法 append
        levels[curLevel] = append(levels[curLevel], root.Val) // bingo

        traverse(root.Left, curLevel+1)
        traverse(root.Right, curLevel+1)
    }

    traverse(root, 0)

    var res []int
    for _, level := range levels {
        sort.Ints(level)
        res = append(res, level[len(level)-1])
    }
    return res
}
最后编辑: kuteng  文档更新时间: 2021-06-05 10:16   作者:kuteng