操作与求度为2的结点一样(上一篇),只需要更改检索条件。
下面附测试用例
先序遍历序列要求将没有左、右孩子的结点用#表示,便于生成树。
#include <iostream>
using namespace std;
typedef char datatype;
struct node {
datatype data;
node *lchild;
node *rchild;
};
typedef node *BTREE;
void CreateBT(BTREE &BT) {
char ch;
cin >> ch;
if (ch == '#')
BT = NULL;
else {
BT = new node;
BT->data = ch;
CreateBT(BT->lchild);
CreateBT(BT->rchild);
}
}
int Leafnum(BTREE BT) {
if (BT == NULL)
return 0;
else if (BT->lchild == NULL && BT->rchild == NULL)
return Leafnum(BT->lchild) + Leafnum(BT->rchild) + 1;
else
return Leafnum(BT->lchild) + Leafnum(BT->rchild);
}
int main() {
BTREE BT;
int a;
cout << "请输入树的先序遍历以构建树:";
CreateBT(BT);
a = Leafnum(BT);
cout << "叶子结点的个数为:" << endl << a ;
return 0;
}
// ABDH##I##EJ###CF##G##
主要参考: 《数据结构与算法》(第五版)张岩
《数据结构考研复习指导》(王道)