假设二叉树采用二叉链表存储结构,设计一个算法求其指定的某一层k(k>1)的叶子结点个数,要求:
问答题 给出算法的基本设计思想。
【正确答案】正确答案:算法的基本设计思想: 可以使用层次遍历模型,只需在层次遍历上加上记录当前层次的功能。 当没有达到目标层时,把该结点的孩子结点入队列; 当达到目标层时,不再让各个结点的孩子结点入队,而是统计这一层叶子结点的数目即可。
【答案解析】
问答题 写出二叉树采用的存储结构代码。
【正确答案】正确答案:二叉树存储结构如下: typedef struct BiTNode{ ElemType data; //数据域 struct BiTNode *lchild,*rchild; //左、右孩子指针 }BTNode,*BiTree
【答案解析】
问答题 根据设计思想,采用C或C++语言描述算法,关键之处给出注释。
【正确答案】正确答案:算法的设计如下: int n; int LeafKLevel(BiTree root,int k){ n=0; PreOrder(root,0,k); return 0; } int PreOrder fBiTree root,int deep,int k){ if(deep<k){ if(root—>lchild!=NULL) //若左子树不空,对左子树递归遍历 PreOrder(root—>lchild,deep+1); if(root—>rchiid!=NULL) //若右子树不空,对右子树递归遍历 PreOrder(root—>rchild,deep+1), } else if{deep==k&&root—>lchild==NULL&&root—>rchild==NULL) ++n, }
【答案解析】