设计统计二叉树中度为1的结点个数的算法。 二叉树结点类型定义如下: typedef struct node { char data; /* 数据元素 */ struct node *lchild; /* 指向左孩子结点 */ struct node *rchild; /* 指向右孩子结点 */ } BTNode; 设计一个算法,计算一棵给定二叉树中度为1的结点个数。参数b为指向二叉树根结点的指针,返回值为度数为1的结点个数值。 函数原型为:int SingleNodes(BTNode *b);
时间: 2024-04-01 10:32:50 浏览: 124
算法思路如下:
1. 若当前结点为空,返回0。
2. 若当前结点的左、右孩子都为空,返回0。
3. 若当前结点的左孩子不为空,右孩子为空,返回1+SingleNodes(左孩子)。
4. 若当前结点的右孩子不为空,左孩子为空,返回1+SingleNodes(右孩子)。
5. 若当前结点的左、右孩子都不为空,返回SingleNodes(左孩子)+SingleNodes(右孩子)。
实现代码如下:
```c
int SingleNodes(BTNode *b) {
if (!b) { // 当前结点为空,返回0
return 0;
}
if (!b->lchild && !b->rchild) { // 当前结点的左、右孩子都为空,返回0
return 0;
}
if (b->lchild && !b->rchild) { // 当前结点的左孩子不为空,右孩子为空,返回1+SingleNodes(左孩子)
return 1 + SingleNodes(b->lchild);
}
if (!b->lchild && b->rchild) { // 当前结点的右孩子不为空,左孩子为空,返回1+SingleNodes(右孩子)
return 1 + SingleNodes(b->rchild);
}
// 当前结点的左、右孩子都不为空,返回SingleNodes(左孩子)+SingleNodes(右孩子)
return SingleNodes(b->lchild) + SingleNodes(b->rchild);
}
```
阅读全文