题目
解法:
这其实就是层级遍历,一般用bfs实现,两个循环嵌套,内循环负责遍历一层上所有节点
python代码如下:
class Solution:
def averageOfLevels(self, root: TreeNode) -> List[float]:
q = collections.deque();
q.append(root)
ans = []
while q:
_len = len(q)
level_nodes = []
while _len:
node = q.popleft();
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
level_nodes.append(node.val)
_len -= 1
ans.append(sum(level_nodes)/len(level_nodes))
return ans
C++如下:
class Solution {
public:
vector<double> averageOfLevels(TreeNode* root) {
vector<double> ans;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()){
int len = q.size();
double sum = 0;
for(int i=0;i<len;i++){
TreeNode* node = q.front();
q.pop();
sum += node->val;
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
ans.push_back(sum/len);
}
return ans;
}
};