tree的叶子结点个数和单叶子结点个数

本文介绍了一种使用C++编程语言构建二叉树的方法,并实现了二叉树的字符串表达形式到二叉树结构的转换。此外,还提供了计算二叉树叶子节点数量及单子节点数量的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//a(b(d,e(h(j,k(l,m(,n))))),c(f,g(,i))) //data source exp113 #include<iostream> using namespace std; const int SIZE=10000; struct BTNode{ char data; struct BTNode * lchild,*rchild; }; void createBTree(BTNode * &bt,char *str){ BTNode* st[SIZE],*p=NULL; int top=-1,k,j=0; char ch; bt=NULL; ch=str[j]; while(ch){ switch(ch){ case '(':top++;st[top]=p;k=1;break; case ')':top--; break; case ',':k=2;break; default: p=(BTNode *)malloc(sizeof(BTNode)); p->data=ch;p->lchild=p->rchild=NULL; if(bt==NULL) bt=p; else{ switch(k){ case 1:st[top]->lchild=p;break; case 2:st[top]->rchild=p;break; } } } j++; ch=str[j]; } } void display(BTNode * bt){ if(bt!=NULL){ cout<<bt->data; if(bt->lchild!=NULL || bt->rchild!=NULL){ cout<<"("; display(bt->lchild); if(bt->rchild!=NULL) cout<<","; display(bt->rchild); cout<<")"; } } //cout<<endl; } int LeafCount(BTNode * bt){ int num1,num2; if(bt==NULL) return 0; else if(bt->lchild==NULL && bt->rchild==NULL) return 1; else{ num1=LeafCount(bt->lchild); num2=LeafCount(bt->rchild); return num1+num2; } } int SngLeafCount(BTNode * bt){ int num1,num2; if(bt==NULL) return 0; else if(bt->lchild==NULL && bt->rchild!=NULL){ num1=SngLeafCount(bt->rchild); return num1+1; } else if(bt->lchild!=NULL && bt->lchild==NULL){ num1=SngLeafCount(bt->lchild); return num1+1; } else{ num1=SngLeafCount(bt->lchild); num2=SngLeafCount(bt->rchild); return num1+num2; } } int main(){ char str[100]; cin>>str; BTNode* bt; createBTree(bt,str); display(bt); cout<<endl; cout<<LeafCount(bt)<<endl; cout<<SngLeafCount(bt)<<endl; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值