Find Largest Value In Each Tree Row
在每个树行中找最大值
题目描述
在二叉树的每一行中找到最大值。
示例:
输入:
1
/ \
3 2
/ \ \
5 3 9
输出: [1, 3, 9]
解法
二叉树的定义为:
type TreeNode struct {
Val int
Left, Right *TreeNode
}
解法一:广度优先遍历
时间复杂度:
O(N)
空间复杂度:
O(N)
func largestValues(root *TreeNode) []int {
result := []int{}
if root == nil {
return result
}
queue := []*TreeNode{root}
for len(queue) > 0 {
maxValue := math.MinInt64
qLen := len(queue)
for _, ele := range queue {
if ele.Val > maxValue {
maxValue = ele.Val
}
if ele.Left != nil {
queue = append(queue, ele.Left)
}
if ele.Right != nil {
queue = append(queue, ele.Right)
}
}
result = append(result, maxValue)
queue = queue[qLen:]
}
return result
}
解法二:深度优先遍历(前序遍历)
时间复杂度:
O(N)
空间复杂度:
O(N)
func largestValues(root *TreeNode) []int {
result := []int{}
return helper(root, result, 0)
}
func helper(node *TreeNode, result []int, layer int) []int {
if node == nil {
return result
}
if len(result) == layer {
result = append(result, node.Val)
} else {
if result[layer] < node.Val {
result[layer] = node.Val
}
}
result = helper(node.Left, result, layer+1)
result = helper(node.Right, result, layer+1)
return result
}
Last updated
Was this helpful?