二叉树数据结构
struct TreeNode{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x):val(x), left(NULL), right(NULL){}
};
//二叉树的深度优先搜索
void traversal(TreeNode *node){·
//此时访问node称为前序遍历
traversal(node->left);
//此时访问node称为中序遍历
traversal(node->right);
//此时访问node称为后序遍历
}
二叉树的层次遍历,又称宽度优先搜索,按树的层次依次访问树的结点。层次遍历使用队列对遍历结点进行存储,先进入队列的结点,优先遍历拓展其左孩子与右孩子
//设置队列 Q
//将根节点push进 Q
while(Q不空){
//取出队列头部结点node
//对node访问
//将node的左、右孩子push进队列
}
代码如下:
void BFS_print(TreeNode *root){
std::queue<TreeNode *> Q;
Q.push(root);
while (!Q.empty()){
TreeNode *node = Q.front();
Q.pop();
printf("[%d]\n", node->val);
if(node->left){
Q.push(node->left);
}
if (node->right){
Q.push(node->right);
}
}
}
class Solution
{
public:
vector<vector<int>> levelOrder(TreeNode* root)
{
vector<vector<int>> result;
queue<TreeNode*> que;
if(root != nullptr) que.push(root);
while (!que.empty())
{
int size = que.size();
vector<int> vec;
for (int i = 0; i < size; i++)
{
TreeNode* tmpNode = que.front();
que.pop();
vec.push_back(tmpNode->val);
if (tmpNode->left != nullptr) que.push(tmpNode->left);
if (tmpNode->right != nullptr) que.push(tmpNode->right);
}
result.push_back(vec);
}
return result;
}
};