| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | /** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */func largestValues(root *TreeNode) (res []int) {	preorder(root, 0, &res) // DFS	return}func preorder(root *TreeNode, depth int, res *[]int) {	if root == nil {		return	}	if depth == len(*res) {		*res = append(*res, root.Val)	} else if (*res)[depth] < root.Val {		(*res)[depth] = root.Val	}	preorder(root.Left, depth+1, res)	preorder(root.Right, depth+1, res)}func largestValuesBFS(root *TreeNode) (res []int) {	if root == nil {		return	}	queue := make([]*TreeNode, 0)	queue = append(queue, root)	size := 1	for size != 0 {		max, l := queue[0].Val, size		for i := 0; i < l; i++ {			node := queue[0]			queue = queue[1:]			size--			if max < node.Val {				max = node.Val			}			if node.Left != nil {				queue = append(queue, node.Left)				size++			}			if node.Right != nil {				queue = append(queue, node.Right)				size++			}		}		res = append(res, max)	}	return}
 |