题目描述:具体描述见原题。简单来说就是记录二叉树每层节点中最大的节点值,并返回。
解题思路:同样利用BFS,在遍历过程中分别记录每层中最大节点值,大体思路同leetcode-513,具体过程见代码。
具体代码:
func largestValues(root *TreeNode) []int {
queue, res := make([]*TreeNode, 0), make([]int, 0)
if root == nil { // 测试用例中会有[]出现
return res
}
res = append(res, root.Val)
if root.Left == nil && root.Right == nil {
return res
}
queue = append(queue, root)
for len(queue) != 0 {
temp:= make([]*TreeNode, 0)
for _, q := range queue{ // 记录每层所有节点
if q.Left != nil {
temp = append(temp, q.Left)
}
if q.Right != nil {
temp = append(temp, q.Right)
}
}
if len(temp) == 0 { // 当temp为空时,表示当前二叉树已经遍历完成
return res
}
tag := temp[0].Val
for _, t := range temp{ // 找到每层节点中最大节点值
if t.Val > tag {
tag = t.Val
}
}
res = append(res, tag)
queue = temp // 如果不小心丢掉这一句,你将迷失在循环中。说人话就是超出时间限制
}
return res
}
补充说明:明天估计也是BFS。