zoukankan      html  css  js  c++  java
  • 层次遍历应用

    //使用层次遍历二叉树的最大宽度
    typedef struct 
    {
        Btnode * p;        //结点指针
        int     lno;    //节点所在层号
    }St
    
    int maxNode(BTnode *b)
    {
        //创建一个顺序非循环队列
        St que[maxsize];
        int front,rear;
        fronf = rear = 0;
        int Lno,i,j,n,max;    //Lno 用来存储最大层号,max用来存储最大宽度
                            //使用i,j来遍历数组,得到max
        //创建一个工作指针
        BTnode *q;
        
        if(b!=NULL)
        {
            //根节点入队
            ++rear;
            que[rear].p=b;
            que[rear].lno=1;//树根所在层次为1
            
            while (front!=rear)
            {
                //队头出队
                ++front;
                q = que[front].p;
                Lno = que[front].lno;    //关键语句,保存当前层层号
                
                if (q->lchild!=NULL)//左子树不空则左子树进队
                {
                    ++rear;
                    que[rear].p=q->lchild;
                    que[rear].lno=Lno+1;    //关键语句,子树的层次=根的层次+1
                }
                if (q->rchild!=NULL)//右子树不空则右子树进队
                {
                    ++rear;
                    que[rear].p=q->rchild;
                    que[rear].lno=Lno+1;    //关键语句,孩子节点层次=根的层次+1
                }
                //循环结束后,Lno 就保存了此树的最大层次,然后使用一个求和就可以求出最大宽度
            }
            max = 0;
            //使用两个for循环达到找出最大宽度的目的
            for (i=1;i<=Lno;++i)
            {
                n=0
                for(j=1;j<=rear;++j)//因为是从下标1处存节点数据的,所以j从1开始遍历
                {
                    if(que[j]==i)
                    ++n;
                
                    if (max<n)
                        max=n;
                }
            }
            return max;
        }
        return 0;//树为空,则返回0
    }
  • 相关阅读:
    如果一切需要重学,2014年应该学哪些技术?
    LINUX 更新
    LINUX学习
    判断设备是笔记本,还是台式机
    DUILIB 实现微信气泡聊天效果
    OC学习1
    DUILIB 背景贴图
    DUILIB CDialogBuilder 使用问题
    my english dream
    oracle 函数
  • 原文地址:https://www.cnblogs.com/Eric-Chou/p/12034543.html
Copyright © 2011-2022 走看看