2022-06-24
Description
Input: root = [1,3,2,5,3,null,9]
Output: [1,3,9]Input: root = [1,2,3]
Output: [1,3]Solution
Approach #0: BFS
Approach #1: DFS
Last updated
Input: root = [1,3,2,5,3,null,9]
Output: [1,3,9]Input: root = [1,2,3]
Output: [1,3]Last updated
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func largestValues(root *TreeNode) (ans []int) {
if root == nil {
return
}
queue := []*TreeNode{root}
for len(queue) > 0 {
size := len(queue)
big := queue[0].Val
for i := 0; i < size; i++ {
cell := queue[i]
big = max(big, cell.Val)
if cell.Left != nil {
queue = append(queue, cell.Left)
}
if cell.Right != nil {
queue = append(queue, cell.Right)
}
}
ans = append(ans, big)
queue = queue[size:]
}
return
}
func max(a, b int) int {
if a > b {
return a
}
return b
}/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func largestValues(root *TreeNode) (ans []int) {
if root == nil {
return
}
var dfs func(*TreeNode, int)
dfs = func(node *TreeNode, depth int) {
if node == nil {
return
}
if len(ans) <= depth {
ans = append(ans, node.Val)
} else {
ans[depth] = max(ans[depth], node.Val)
}
dfs(node.Left, depth+1)
dfs(node.Right, depth+1)
}
dfs(root, 0)
return
}
func max(a, b int) int {
if a > b {
return a
}
return b
}