按层数层序历遍

按层数层序历遍

这里我先贴一个按层数层序历遍的模板。

伪码描述:

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变量是干嘛的?

用来记录每一层结点的数量,以达到层数历遍的效果。

主要过程已经用图画出来了。应该相当清楚了。希望能让各位看懂。

posted @ 2020-02-22 11:16  Herman·H  阅读(248)  评论(0编辑  收藏  举报