思路
这种需要一层一层,分开遍历或者处理的题目可以用双队列实现~
class Solution {
public List<Integer> largestValues(TreeNode root) {
List<Integer> result = new ArrayList<>();
int max = Integer.MIN_VALUE;
Queue<TreeNode> queue1 = new LinkedList<>(), queue2 = new LinkedList<>();
queue1.offer(root);
if(null == root)
return result;
while (!queue1.isEmpty()) {
TreeNode node = queue1.poll();
max = Math.max(max, node.val);
if (null != node.left)
queue2.offer(node.left);
if (null != node.right)
queue2.offer(node.right);
if (queue1.isEmpty()) {
queue1 = queue2;
queue2 = new LinkedList<>();
result.add(max);
max = Integer.MIN_VALUE;
}
}
return result;
}
}
Go代码
func largestValues(root *TreeNode) []int {
if root == nil {
return []int{}
}
q1, q2 := []*TreeNode{root}, []*TreeNode{}
var result []int
levelMax := math.MinInt
for len(q1) != 0 {
node := q1[0]
q1 = q1[1:]
if node.Left != nil {
q2 = append(q2, node.Left)
}
if node.Right != nil {
q2 = append(q2, node.Right)
}
levelMax = max(levelMax, node.Val)
if len(q1) == 0 {
q1 = q2
q2 = []*TreeNode{}
result = append(result, levelMax)
levelMax = math.MinInt
}
}
return result
}
func max(m, n int) int {
if m > n {
return m
}
return n
}