![7a7ef534648b4797de3de01a2496e5f5.png](https://i-blog.csdnimg.cn/blog_migrate/6c9f9ce2d72b04acad5202f5688678c0.png)
孩子兄弟表示法模型,每个结点都有一个指向其第一个孩子的指针,每个结点都有一个指向其第一个右兄弟的指针 。
算法思想:在递归在孩子与兄弟中找叶子结点,找到i++,并返回;
样例调试输入
A
B
#
C
D
#
#
E
#
#
#
输入2
A
B
#
C
F
H
I
#
#
#
G
#
#
D
#
E
#
#
#
源代码#includeusing namespace std;#define TElemType chartypedef struct TreeNode{ TElemType data; struct TreeNode *firstchild,*nextbrother;}TreeNode,*Tree;int CreateTree(Tree &T){ char ch; cin>>ch;//输入 if(ch=='#') { T=NULL; } else { T=(Tree)malloc(sizeof(TreeNode)); if(!T) { cout<<"内存分配错误!!"<<endl; exit(0); } T->data=ch; cout<<"输入"<"的孩子(#为没有):"; CreateTree(T->firstchild);//有孩子结点,先创建孩子树 cout<<"输入"<"的兄弟(#为没有):"; CreateTree(T->nextbrother);//再创建兄弟的树 } return 0;}//叶子节点数目int LeftNum(Tree T,int &i){ if(T) { if(!T->firstchild&&!T->nextbrother) { // cout<data< i++; } LeftNum(T->firstchild,i); LeftNum(T->nextbrother,i); } return i;}int main(){ Tree T; int i; cout<<"请输入孩子兄弟树(#为没有):"; CreateTree(T); cout<<"树创建成功!"<<endl; LeftNum(T,i); cout<<"树的叶子数为:"<endl; system("pause");}
结果分析
时间复杂度为O(nlog(n))
![7d9a922065c3b0ea183d741554c57543.png](https://i-blog.csdnimg.cn/blog_migrate/8a20075e86c040cf5997b29027bf370a.png)
![5a63502d73563dbedc0bb4e7558b8362.png](https://i-blog.csdnimg.cn/blog_migrate/ef48ce70f931686b897ca5c6a0537d13.png)
![a25ce5828650aee4dd6d7c4192a6dba4.png](https://i-blog.csdnimg.cn/blog_migrate/1f9779d43b8aa4a8edb5447079ccaabc.png)
![6ae1c8a36d2ecdb15ebcca778cff0d3e.png](https://i-blog.csdnimg.cn/blog_migrate/6a66ba6f35e576cb1a9e6d305dda6d55.png)