二叉树的层序遍历
二叉树的层序遍历跟前中后序遍历有点不一样,层序遍历是一层一层的遍历,用到的数据结构不是栈而是队列。
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*>que;
vector<vector<int>>result; //定义的二维数组用来存放每一层遍历的结果
if(root!=NULL)que.push(root); // 如果不是空树 则将根节点入队列
while(!que.empty()){
int size = que.size(); // 每次都将队列内的元素全部出队列 因此固定队列大小 用for循环
vector<int>res; // 定义数组存放每一层遍历结果
for(int i = 0; i < size ;i++){
TreeNode *node = que.front(); // 此时的队头元素是要出队列的元素
que.pop();
res.push_back(node->val); // 将此时节点的值放进队列
if(node->left)que.push(node->left);
if(node->right)que.push(node->right);
}
result.push_back(res);
}
return result;
}
层序遍历很重要,很多二叉树的算法题都是在二叉树的遍历基础上,然后再加上其他的操作。