描述
给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
该二叉树层序遍历的结果是
[
[3],
[9,20],
[15,7]
]
提示:
0 <= 二叉树的结点数 <= 1500
示例1
输入:
{1,2}
返回值:
[[1],[2]]
示例2
输入:
{1,2,3,4,#,#,5}
返回值:
[[1],[2,3],[4,5]
思路分析: 层序遍历,是将一个结点的左右节点,按照一层层的进行遍历,所以我们使用队列,先进先出,从根结点进行push到队列,如果第二层存在,就是队列出来的顺序,第二层每个执行的元素添加到队列当中,所以添加的所有结点在第二层的后面,假设pop遍历第n层的节点,每个节点会push左右两个节点进去。但是队列先进先出。它会放到队尾(下一层)。直到第n层的最后一个pop出来,第n+1层的还在队列中整齐排着,这就达到一个层序的效果。
实例分析: 二叉树{3,9,20,#,#,15,7}
| 二叉树 | 3 | |||
| 第二层 | 9 | 20 | ||
| 第三层 | 15 | 7 | ||
| 首先我们创建队列q,将root = 3放进q中,随后对q进行判断,第一层输出[3] | ||||
| 再将第二层放入队列中,pop出队列,返回值[9,20] | ||||
| 同上,最后将第三层[15,7]返回 | ||||
| 最终res容器中的值为[[3],[9,20],[15,7]] |
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型vector<vector><>>
*/
vector levelOrder(TreeNode* root) {
// write code here
vector res;//存放最终的结果值
if(root == NULL)
return res;
queue<treenode> q;//定义队列
q.push(root);//将根节点放进去
while(!q.empty()){
vector temp;//设立容器
int n = q.size();//队列中容器的大小
for(int i = 0; i < n;i++){ TreeNode* node = q.front();//第一个元素
q.pop();
temp.push_back(node->val);//将第一层的值存放到容器当中
if(node->left != NULL)
q.push(node->left);//将左子树放进去
if(node->right != NULL)
q.push(node->right);//将右子树放进去
}
res.push_back(temp);
}
return res;
}
};</treenode></vector>