注意!!!!!如果没有输出结果,一定是输入的建树序列有错误,我建好了2棵树,如果没有输出结果,大家可以用这两棵树试。
main函数的btDepth(t,2)第二个参数是树的层数了k,我这里输入的是2。
输入:abd###ce###
输出:2
树的形状:

大家还可以试一下这棵树:
输入:abd##e##cf###
输出:1
树的形状:

- #include "bits/stdc++.h"
- using namespace std;
- typedef struct BiTNode{
- char data;
- struct BiTNode *lchild,*rchild;
- int tag;
- }BiTNode,*BiTree;
-
- void createTree(BiTree &t){
- char ch;
- ch=getchar();
- if (ch=='#') t=NULL;
- else{
- t=(BiTNode *) malloc(sizeof (BiTNode));
- t->data=ch;
- t->tag=0;
- t->lchild=NULL;
- t->rchild=NULL;
- createTree(t->lchild);
- createTree(t->rchild);
- }
- }
- int btDepth(BiTree t,int k){
- if (!t)
- return 0;
- int front=-1,rear=-1;
- int last=0,level=0;
- int m=0;//
- BiTree Q[100];
- Q[++rear]=t;
- BiTree p;
- while (front
- p=Q[++front];
- if (p->lchild)
- Q[++rear]=p->lchild;
- if (p->rchild)
- Q[++rear]=p->rchild;
- if (front==last){
- level++;
- last=rear;
- if (level==k-1){
- while (front!=last+1){
- p=Q[++front];
- if (p->lchild==NULL&&p->rchild!=NULL||p->lchild!=NULL&&p->rchild==NULL)
- m++;
- if (p->lchild)
- Q[++rear]=p->lchild;
- if (p->rchild)
- Q[++rear]=p->rchild;
- }
-
- }
- }
- }
- return m;
- }
- int main() {
- BiTree t;
- createTree(t);
- //btDepth(t);
- printf("%d", btDepth(t,2));
-
- }