二叉树的层序遍历广义上来讲实际上可以叫做广度优先搜索,而只要是广度优先搜索,就都会用到一个队列。而二叉树的前后中序遍历实际上是深度优先搜索,深度优先搜索要么用栈来模拟递归的过程,要么就直接一点,直接用递归的方法解决。
思路:二叉树的层序遍历用到的是队列,我们刚开始要将root放到队列里边,前提是root不为空。之后我们就开始循环,循环结束条件就是root为空,以上图举例子,我们把根节点3放进去之后,进行一次循环之后,,我们想让队列里边只剩下他的孩子节点就是9,20,而ret数组里面要有第一层的3。第二次循环的时候,按照层序遍历的顺序,应该在一个小循环里面循环两次,因为第二层有两个元素9和20.小循环里面先让队列首段出队,如果之前队列首端的左孩子不为空的话,队尾加左孩子,右孩子不为空加右孩子,小循环结束后,我们要将第二层的9和20放到ret当中。就这样一直循环,直到队列变空。代码如下:
vector<vector<int>> levelOrder(TreeNode* root)
{
vector<vector<int>> ret;
queue<TreeNode*> que;
TreeNode* p;
if(root)que.push(root);
while(!que.empty())
{
vector<int> vec;
int size=que.size();
while(size--)
{
p=que.front();
que.pop();
vec.push_back(p->val);
if(p->left)que.push(p->left);
if(p->right)que.push(p->right);
}
ret.push_back(vec);
}
return ret;
}