leetcode每个树行中找最大值
题目描述
给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。
输入: root = [1,3,2,5,3,null,9]
输出: [1,3,9]
Java代码:
public List<Integer> largestValues(TreeNode root) {
if(root==null){
return new ArrayList<>();
}
List<Integer> res = new ArrayList<>();
//队列中保存着每一行的节点
Queue<TreeNode> qList = new ArrayDeque<>();
qList.add(root);
while (!qList.isEmpty()){
//size 为一层节点的数目
int size = qList.size();
int max=Integer.MIN_VALUE;
while (size>0){
size--;
TreeNode cur = qList.poll();//弹出一个节点,并将此节点的孩子加入队列但不更新size
if(cur.left!=null){
qList.offer(cur.left);
}
if(cur.right!=null){
qList.offer(cur.right);
}
max=max>cur.val?max:cur.val;
}
res.add(max);
}
return res;
}
python代码:
class Solution(object):
def largestValues(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
nodes = []
res = []
if root:
nodes.append(root)
while len(nodes) > 0:
size = len(nodes)
m = int(-math.pow(2, 31))
while size > 0:
size -= 1
cur = nodes.pop(0)
m = cur.val if cur.val > m else m
if cur.left:
nodes.append(cur.left)
if cur.right:
nodes.append(cur.right)
res.append(m)
return res