上海网站开发哪家好薇,iis网站权限,电子商务公司名称大全简单大气,网站开发多钱每日一题(LeetCode)----二叉树–二叉树的层平均值
1.题目#xff08;637. 二叉树的层平均值#xff09; 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 示例 1#xff1a; 输入#xff1a;root […每日一题(LeetCode)----二叉树–二叉树的层平均值
1.题目637. 二叉树的层平均值 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 示例 1 输入root [3,9,20,null,null,15,7]
输出[3.00000,14.50000,11.00000]
解释第 0 层的平均值为 3,第 1 层的平均值为 14.5,第 2 层的平均值为 11 。
因此返回 [3, 14.5, 11] 。示例 2: 输入root [3,9,20,15,7]
输出[3.00000,14.50000,11.00000]提示 树中节点数量在 [1, 104] 范围内-231 Node.val 231 - 1
2.解题思路
思路一层序遍历
1.使用一个队列 其中元素的类型为node类型的指针这里的队列我们用的是c中封装好的其实是模板类我们这里是通过模板类创建了一个对象和一个结果数组结果数组用来存最终的结果
2.定义一个变量来记录当前层元素的个数每出列一个元素都更新再定义一个变量用来记录当前层总和和另一个变量用来记录当前层元素总数当当前层元素都遍历完时进行更新
3.初始时我们将根节点放入到队列中去当前层元素个数记为1提示每出队列一个元素那么当前层元素的个数进行-1操作
4.我们将队列中的首元素出列并将其不为空的左孩子和右孩子入队然后当前层总和加上当前节点的值当前层元素个数-1当当前层元素个数变为0时我们将当前层总和除以当前层元素总数的值放入到我们的结果数组中并获取下一层元素个数下一层元素的总数重复这个操作直到队列为空结束
5.返回结果数组
3.写出代码
思路一的代码
class Solution {
public:vectordouble averageOfLevels(TreeNode* root) {vectordouble res;if(rootnullptr){return res;}queueTreeNode* qe;int t0;qe.push(root);t1;int xt;double num0;while(!qe.empty()){TreeNode* tempqe.front();numtemp-val;qe.pop();if(temp!nullptrtemp-left!nullptr){qe.push(temp-left);}if(temp!nullptrtemp-right!nullptr){qe.push(temp-right);}t--;if(t0){res.push_back(num/x);num0;tqe.size();xt;}}return res;}
};