按层数层序历遍
这里我先贴一个按层数层序历遍的模板。
伪码描述:
void 按层数层序遍历(根节点){
初始化队列,临时变量;
将根节点放入队列中;
while(队列不为空){
获取队列长度size;
while(size不为0){
取出队首结点;
if(队首结点的左孩子不为NULL) 将队首结点的左孩子放进队列;
if(队首结点的右孩子不为NULL) 将队首结点的右孩子放进队列;
弹出队首结点;
完成一个结点的遍历,size--;
}
}
}
c++代码:
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void BFS(TreeNode* root){
int size=0;
TreeNode *temp;
queue<TreeNode*> que;
que.push(root);
while(!que.empty()){
size=que.size();
while(size--){
temp=que.front();
que.pop();
if(temp->left!=NULL) que.push(temp->left);
if(temp->right!=NULL) que.push(temp->right);
}
}
}
详解:
先仔细看看伪码描述,笔者自认为已经描述的很清楚了。倘若仍有不解,再看这里的详解。
size变量是干嘛的?
用来记录每一层结点的数量,以达到层数历遍的效果。
主要过程已经用图画出来了。应该相当清楚了。希望能让各位看懂。