层次遍历之寻找二叉树每层最大值

LeetCode 515 Find Largest Value in Each Tree Row

题目

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]

分析

层次遍历的一种比较简单的方法就是bfs广度搜索,利用队列来分别将每层的树添加进队列进行分析,先记录下第一个值作为最大值并弹出,然后往后边比较边弹出,如果当前值比前面的最大值还要大则替换当前最大值。在弹出每次的节点时将孩子节点加进队列。直到整棵树被遍历完。

关键代码

for (int i = 0; i < s; i++) {
        		TreeNode* node = que.front();
        		que.pop();
        		if (node->val > max) max = node->val;
        		if (node->left) que.push(node->left);
        		if (node->right) que.push(node->right);
        	}

AC完整代码

class Solution {
public:
    vector largestValues(TreeNode* root) {
        queue que;
        vector res;
        if (root == NULL) return res;
        que.push(root);
        int s;
        while (!que.empty()) {
        	s = que.size();
        	int max = -2147483648;
        	for (int i = 0; i < s; i++) {
        		TreeNode* node = que.front();
        		que.pop();
        		if (node->val > max) max = node->val;
        		if (node->left) que.push(node->left);
        		if (node->right) que.push(node->right);
        	}
        	res.push_back(max);
        }
        return res;
    }
};

运行分析

时间复杂度为O(n),空间复杂度为O(n)。

Runtime:  17 ms

题目地址: LeetCode 515







你可能感兴趣的:(LeetCode)