zoukankan      html  css  js  c++  java
  • 设计一个算法,求非空二叉树中指定的第k层(k>1)的叶子节点的个数

    思想:採用基于层序遍历的方法。

    用level扫描各层节点,若某一层的节点出队后。rear指向该层中最右节点。则将rear赋值给last(对于第一层。last=1).在出队时,若front=last,表示这一层处理完成,让层号level增1,并置last为下一层最右节点。那么怎样求一层的最右节点呢?这是由于第一层仅仅有一个节点,它就是最右节点。对于其它层。上一层最右节点最后进队的孩子一定是该层的最右节点。

    比如,对于如图所看到的的二叉树。求k=3的叶子节点个数的步骤例如以下:level=1;A进队时rear=1,last=rear=1,出队front=1,再将B和C进队,此时rear=3,因为last=front成立,表示处理下一层。让last=rear=3,level=level+1=2; 出队front=2即B节点。将D和E进队,出队front=3即C节点。将F进队,此时rear=6,因为front=rear成立,表示处理下一层。让last=rear=6,level=level+1=3;出队D(front=4),level=k且D为叶子节点,则leaf=leaf+1=1,出队E(front=5),level=k且E为叶子节点。则leaf=leaf+1=2,出队F(front=6),level=k且F为叶子节点,则leaf=leaf+1=3,因为front=last成立。表示处理下一层,让last=rear=6(没有新节点进队),level=level+1=4;level>k,返回leaf=3.













    相应的算法例如以下:

    int LeafKLevel(BTNode *b,int k)

    {

    BTNode *Qu[MaxSize];//定义循环队列

    int front, rear;//定义队首、队尾指针

    int leaf=0;//leaf累计叶子节点个数

    int last;//定义当前层中最右节点在队列中的位置

    int level;//定义当前节点的层号

    front=rear=0;//置队列为空队列

    if(b==NULL||k<=1)

    return 0;

    rear=(rear+1)%MaxSize;//节点指针进队

    Qu[rear]=b;

    last=rear;level=1;//第一层的最右节点在队列中的位置为1

    while(front!=rear)//队列不为空时循环

    {

    front=(front+1)%MaxSize;

    b=Qu[front];//队头出队

    if(level==k&&b->lchild==NULL&&b->rchild==NULL)

    leaf++;//若*b为level层叶子节点。则递增1

    if(b->lchild!=NULL)//左孩子进队

    {

    rear=(rear+1)%MaxSize;

    Qu[rear]=b->lchild;

    }

    if(b->rchild!=NULL)//右孩子进队

    {

    rear=(rear+1)%MaxSize;

    Qu[rear]=b->rchild;

    }

    if(front==last)//同层最右节点处理完成,层数增1

    {

    level++;

    last=rear;//让last指向下一层的最右节点在队列中的位置

    }

      if(level>k)//当层号大于k时返回leaf,不再继续

    return leaf;

    }

    }

    对于如图所看到的的二叉树,求各层叶子节点个数结果如图所看到的:

    二叉树:A(B(D(,G)),C(E,F))

    第1层叶子节点的个数=0

    第2层叶子节点的个数=0

    第3层叶子节点的个数=3

  • 相关阅读:
    ElasticSearch安装配置
    Hadoop新手篇:hadoop入门基础教程
    实用贴:hadoop系统下载安装教程
    超详细hadoop集群服务器安装配置教程
    Hadoop伪分布式环境搭建之Linux操作系统安装
    超详细Dkhadoop虚拟机安装图文教程
    hadoop集群管理系统搭建规划说明
    NLP汉语自然语言处理入门基础知识介绍
    hadoop最新发行稳定版:DKHadoop版本选择详解
    大数据hadoop入门之hadoop家族详解
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5175735.html
Copyright © 2011-2022 走看看