问题及代码:
(1)计算二叉树节点个数
#include <stdio.h>
#include<malloc.h>
#include"btree.h"
int Nodes(BTNode *b)
{
if(b==NULL)
return 0;
else
return Nodes(b->lchild)+Nodes(b->rchild)+1;
}
int main()
{
BTNode *b;
CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");
printf("二叉树中所有的叶子节点是: ");
DispLeaf(b);
printf("\n");
DestroyBTNode(b);
return 0;
}
(2)输出所有叶子节点
void DispLeaf(BTNode *b)
{
if(b!=NULL)
{
if(b->lchild==NULL&&b->rchild==NULL)
printf("%c",b->data);
else
DispLeaf(b->lchild);
DispLeaf(b->rchild);
}
}
int main()
{
BTNode *b;
CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");
printf("二叉树节点个数: %d\n", Nodes(b));
DestroyBTNode(b);
return 0;
}
运行结果:
(1)
(2)
知识点总结:
利用二叉树算法库解决实际问题,两个函数中均用到递归调用,知识点比较简单。
心得体会:
在敲代码中慢慢的开始理解了递归的意思,课后多实践才能加深理解!