二叉树的层序遍历
实现过程
1、首先将二叉树的根节点push到队列中
2、判断队列不为NULL
3、计算队列里的元素个数size
4、输出队头的元素
5、判断节点如果有左节点,就将左节点push到队列中。
6、点如果有右节点,就将右节点push到队列中;
7、将遍历过的节点pop出队列,且size–
8、循环步骤4-7,直到size<0;
9、循环以上操作,直到tree == NULL。
每次内部循环结束后的队列中存在的元素都是同一层的元素。
若需要按顺序输出遍历的结果,可以建立一个二维数组res,一个一位数组temp。
在内部循环中,把每次对头元素的值放进数组temp中,在内部循环结束后得到一组数据
在每次结束内部循环后,把temp加入res中,每一行对应二叉树的每一层数据。
代码实现:(计算每层的平均值)
vector<double> averageOfLevels(TreeNode* root) {
vector<vector<int>>res;
vector<double>re;
double tmp=0;
if(root==NULL)return re;
queue<TreeNode*>tree;
tree.push(root);
while(!tree.empty())
{
vector<int>temp;
int sz=tree.size();
while(sz--)
{
TreeNode* top=tree.front();
tree.pop();
temp.push_back(top->val);
if(top->left)tree.push(top->left);
if(top->right)tree.push(top->right);
}
res.push_back(temp);
}
for(int i=0;i<res.size();i++)
{
for(int j=0;j<res[i].size();j++)
{
tmp+=res[i][j];
}
re.push_back(tmp/res[i].size());
tmp=0;
}
return re;
}