二叉树的层次遍历

 层次遍历即树的BFS

有两种方法:

1.构建两个函数PrintLevelOrder和PrintGivenLevel,前者控制层数,后者打印每层的节点

2.使用FIFO的队列

                                                                     

第一种方法:

#include <iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;

struct node{
    int data;
    struct node *left,*right;
};

void printGivenLevel(struct node* root, int level);
int height(struct node* node);
struct node* newNode(int data);

void printLevelOrder(struct node* root){
    int h=height(root);
    for(int i=1;i<=h;i++)
        printGivenLevel(root,i);
}

void printGivenLevel(struct node* root,int level){
    if(root==NULL)
        return;
    if(level==1)
        cout<<root->data;
    else if(level>1){
        printGivenLevel(root->left,level-1);
        printGivenLevel(root->right,level-1);
    }
}

int height(struct node* node){
    if(node==NULL)
        return 0;

else{
    int lheight=height(node->left);
    int rheight=height(node->right);

    if(lheight>rheight)
        return(lheight+1);
    else
        return(rheight+1);
}
}

struct node* newNode(int data){
    struct node* node=(struct node*)
                        malloc(sizeof(struct node));
    node->data=data;
    node->left=NULL;
    node->right=NULL;
    return(node);
};
int main()
{
    struct node* root=newNode(1);
    root->left=newNode(2);
    root->right=newNode(3);
    root->left->left=newNode(4);
    root->left->right=newNode(5);

    printLevelOrder(root);
    return 0;
}

 第二种方法:队列法

#include <iostream>
#include<queue>
using namespace std;

struct Node{
    int data;
    struct node *left,*right;
};
void printLevelOrder(Node *root){
    if(root==NULL)
        return;
    queue<Node *>q;
    q.push(root);
    while(q.empty()==false){
        Node *node=q.front();
        cout<<node->data<<" ";
        q.pop();
        
        if(node->left!=NULL)
            q.push(node->left);
        if(node->right!=NULL)
            q.push(node->right);
    }
}
Node *newNode(int data){
    Node *temp=new Node;
    temp->data=data;
    temp->data=data;
    temp->left=temp->right=NULL;
    return temp;
}
int main()
{
    Node *root=newNode(1);
    root->left=newNode(2);
    root->right=newNode(3);
    root->left->left=newNode(4);
    root->left->right=newNode(5);
    printLevelOrder(root);
    return 0;
}
原文地址:https://www.cnblogs.com/umrx/p/7478901.html