木又连续日更第4天(4/138)
木又的第146篇leetcode解题报告
二叉树
类型第36篇解题报告
leetcode第637题:二叉树的层平均值
https://leetcode-cn.com/problems/average-of-levels-in-binary-tree
【题目】
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组.
示例 1:
输入:
3
/ \
9 20
/ \
15 7
输出: [3, 14.5, 11]
解释:
第0层的平均值是 3, 第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11].
注意: 节点值的范围在32位有符号整数范围内。
【思路】
本题较为简单,层次遍历,取得每一层平均值即可。
【代码】
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 averageOfLevels(self, root):
"""
:type root: TreeNode
:rtype: List[float]
"""
p = [root]
q = []
res = []
avg = 0
count = 1
while p or q:
if not p:
p = q
q = []
res.append(1.0 * avg / count)
avg = 0
count = len(p)
node = p.pop()
avg += node.val
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
res.append(1.0 * avg / count)
return res
C++版本
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<double> averageOfLevels(TreeNode* root) {
queue<TreeNode*> p;
p.push(root);
queue<TreeNode*> q;
vector<double> res;
double avg = 0;
int count = 1;
TreeNode* node = NULL;
while(p.size() > 0 || q.size() > 0){
if(p.size() == 0){
while(q.size() != 0){
p.push(q.front());
q.pop();
}
res.push_back(1.0 * avg / count);
avg = 0;
count = p.size();
}
node = p.front();
avg += node->val;
p.pop();
if(node->left)
q.push(node->left);
if(node->right)
q.push(node->right);
}
res.push_back(1.0 * avg / count);
return res;
}
};