题目:
You need to find the largest value in each row of a binary tree.
Example:Input: 1 / \ 3 2 / \ \ 5 3 9 Output: [1, 3, 9]
解释:
返回二叉树每一层的最大值,不就是经典的层序遍历问题?
python代码:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def largestValues(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
result=[]
if not root:
return result
queue=[root]
while queue:
layer_number=len(queue)
temp_max=float('-inf')
for i in xrange(layer_number):
tmp=queue.pop(0)
if tmp.left:
queue.append(tmp.left)
if tmp.right:
queue.append(tmp.right)
temp_max=max(temp_max,tmp.val)
result.append(temp_max)
return result
c++代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
#include<queue>
using namespace std;
class Solution {
public:
vector<int> largestValues(TreeNode* root) {
vector<int>result;
if(!root)
return result;
queue<TreeNode*>_queue;
_queue.push(root);
while (!_queue.empty())
{
int len_layer=_queue.size();
int max_val=INT_MIN;
for (int i=0;i<len_layer;i++)
{
TreeNode* tmp=_queue.front();
_queue.pop();
if(tmp->left)
_queue.push(tmp->left);
if(tmp->right)
_queue.push(tmp->right);
max_val=max(max_val,tmp->val);
}
result.push_back(max_val);
}
return result;
}
};
总结: