| 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
 
- }
 
 
  |