注意!!!!!如果没有输出结果,一定是输入的建树序列有错误,我建好了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<rear){
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));
}