题目描述:
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。
示例 1:
输入:
3
/
9 20
/
15 7
输出:[3, 14.5, 11]
解释:
第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。
思路:
可以使用队列,也可以不用队列
存储每层的节点,然后把每层的值相加,求平均值,再把存储下一层的节点,依次类推
代码如下:
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) {
vector<double>res;
queue<TreeNode*>q;
q.push(root);
while(!q.empty()){
int n=q.size();
int i=0;
double temp=0;
while(i++<n){
TreeNode* node=q.front();
q.pop();
temp+=node->val;
if(node->left) q.push(node->left);
if(node->right) q.push(node->right);
}
res.push_back(temp/n);
}
return res;
}
};
Python:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def averageOfLevels(self, root: TreeNode) -> List[float]:
if not root:return []
res=[]
que=[root]
while que:
n=len(que)
temp=0
que_tem=[]
for i in que:
temp+=i.val
if i.left:
que_tem.append(i.left)
if i.right:
que_tem.append(i.right)
que=que_tem
res.append(temp/n)
return res