leetcode-515

192 阅读1分钟

题目描述:具体描述见原题。简单来说就是记录二叉树每层节点中最大的节点值,并返回。

解题思路:同样利用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。