zoukankan      html  css  js  c++  java
  • [二叉树算法]关于层次遍历二叉树的一些算法总结

    //递归遍历二叉树
    void levelOrder(BTNode *T){
        if(T==null) return;
        int height=getHeight(T);
        for(int i=1;i<height;i++){
            _levelOrder(T,i);
        }
    }
    void _levelOrder(BTNode *T,int num){
        if(T==null||i==0) return;
        if(i==1){
            visit(T->data);
            return;
        }    
        _levelOrder(T->lchild,i-1);
        _levelOrder(T->rchild,i-1);
    }
    //使用栈
    void levelOrder(BiTree T){
        Init(Queue Q);
        BTNode* p;
        EnQueue(Q,T);
        while(!isEmpty(Q)){
            DeQueue(Q,p);
            visit(p);
            if(T->lchild){
                EnQueue(Q,T->lchild);
            }
            if(T->rchild){
                EnQueue(Q,T->rchild);
            }
        }
    }

    关于层次遍历二叉树的相关应用


    //层次遍历求二叉树高度  
    int Height(BTNode *T){
        if(T==null) return 0;
        else{
            InitQueue(Q);
            int front=-1,rear=-1;
            int last=0,level=0;
            Q[++rear]=T;
            BTNode *p;
            while(front<rear){
                p=Q[++front];
                if(p->lchild!=null) Q[++rear]=p->lchild;
                if(p->rchild!=null) Q[++rear]=p->rchild;
                if(front==last){
                    level++;
                    last=rear;
                }
            }
            return level;
        }
    }
    //求指定层次叶子节点的个数 
    int Count_leaf(BTNode *t,int k){
        if(t==null) return 0;
        BTNode *p;
        int front=-1,rear=-1;
        int last=0,level=0,num=0;
        InitQueue(Q);
        Q[++rear]=T;
        while(front<rear){
            p=Q[++front];
            if(p->lchild==null && p->rchild==null && level=k-1) num++;
            if(p->lchild!=null) Q[++rear]=p->lchild;
            if(p->rchild!=null) Q[++rear]=p->rchild;
            if(front==last){
                last=rear;
                level++;
            }
            if(level>k) return num;
        }
        return 0;
    }
    //求二叉树的宽度 
    int count_bread(BTNode *t){
        if(t==null) return 0;
        BTNode *p;
        int front=-1,rear=-1;
        int last=0;
        InitQueue(Q);
        int tempnum=0,max=0;
        Q[++rear]=T;
        while(front<rear){
            p=Q[++front];
            tempnum++;
            if(p->lchild!=null) Q[++rear]=p->lchild;
            if(p->rchild!=null) Q[++rear]=p->rchild;
            if(front==last){
                last=rear;
                if(tempnum>max){
                    max=tempnum;
                }
                tempnum=0;
            }
        }
        return max;
    }
    //判断一棵树是否为完全二叉树 4
    bool IsComplete(BTNode *T){
        if(T==null) return true;
        BTNode *p=T;
        InitQueue(Q,p);
        while(!isEmpty(Q)){
            p=DeQueue(Q);
            if(p==null) break;
            EnQueue(Q,p->lchild);
            EnQueue(Q,p->rchild);
        }
        while(!isEmpty(Q)){
            p=DeQueue(&Q);
            if(p!=null)
                return false;
        }
        return true;
    }

    欢迎留言讨论

  • 相关阅读:
    gulp-API介绍
    前端构建工具gulpjs的使用介绍及技巧(转载)
    atom插件之less-autocompile
    atom-安装插件
    gulp入门1
    edp 基于node.js和npm的前端开发平台
    (转)详解JavaScript模块化开发
    require.js
    thinkcmf5 iis+php重写配置
    thinkcmf5 模板版变量的加载过程 和 新增网站配置项怎么全局使用
  • 原文地址:https://www.cnblogs.com/zzuuoo666/p/12083151.html
Copyright © 2011-2022 走看看