给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
解题思路:建立一个队列用来存储节点,首先把根节点压入队列,第一层循环条件是队列不为空,第二层循环为根据队列中节点的个数,首先获取头节点存储的地址,保存头节点指向的数据,弹出头节点,并把不为空的左子树和右子树压入队列,以此循环。
关于vector<vector<int>>的初始化,首先初始化一个vector<vector<int>>result 和 vector<int> temp变量,使用temp.push_back(val)保存节点的数据,一层数据保存完后再执行result.push_back(temp);
vector<vector<int>> Solution::levelOrder(TreeNode* root)
{
vector<vector<int>> result;
vector<int> temp;
queue<TreeNode*> TreeQueue;
unsigned long cursize = 0;
if(root == NULL)
{
return result;
}
TreeQueue.push(root);
while(TreeQueue.size() != 0)
{
cursize = TreeQueue.size();
for(unsigned int index = 0; index < cursize; index ++)
{
TreeNode* indexnode = TreeQueue.front();
TreeQueue.pop();
temp.push_back(indexnode->val);
if(indexnode->left != NULL)
{
TreeQueue.push(indexnode->left);
}
if(indexnode->right != NULL)
{
TreeQueue.push(indexnode->right);
}
}
result.push_back(temp);
temp.clear();
}
return result;
}