思路:1.创建一个队列,将树存入队列;
2.遍历队列,一层一层取出元素,需要借助临时的树,然后当左右孩子不为空,更新队列,将这一层元素存入一维vector。
3.遍历完一层,将上一层数据存入二维vecctor,重新计算队列的大小,获取新的一层 数据。
上代码:
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型vector<vector<>>
*/
vector<vector<int> > levelOrder(TreeNode* root)
{
// write code here
vector<vector<int>> res;//定义返回的二维数组
queue<TreeNode *> q;//定义队列
q.push(root);//将树放入队列中
if(root==NULL) return res;
while(!q.empty())
{
int n=q.size();
vector<int> temp;//用于储存当前遍历的这一层
for(int i=0;i<n;i++)
{
TreeNode *Tree=q.front();//将队列的第一个元素取出
q.pop();
temp.push_back(Tree->val);//第一个元素存入temp
if(Tree->left!=NULL)q.push(Tree->left);//左孩子不为空插入队列
if(Tree->right!=NULL)q.push(Tree->right);//又孩子不为空插入队列
}
res.push_back(temp);//将这一层数据放入res
}
return res;
}
};