zoukankan      html  css  js  c++  java
  • 二叉树的层次遍历

     层次遍历即树的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;
    }
  • 相关阅读:
    2.WSDL 文档
    SQL SERVER取分组数据第一条:查出每个班级的成绩第一名
    生成随机字符串
    js返回上一页并刷新的几种方法
    SQL 单表查询多个计算的值
    SQL 从字符串中提取数字
    SQL 视图和表
    WebSrevice (2)
    WebSrevice (1)
    CSS中如何选择ul下li的奇数、偶数行
  • 原文地址:https://www.cnblogs.com/umrx/p/7478901.html
Copyright © 2011-2022 走看看