统计二叉树的度为1的结点个数; int n1Count(BiTree T,int n,int n0){ /**************begin************/ /**************end************/ }
时间: 2024-05-28 11:06:56 浏览: 20
统计二叉树的度为1的结点个数可以通过递归实现,具体实现如下:
int n1Count(BiTree T, int n, int n0) {
if (T == NULL) { // 若树为空,则度为1的结点个数为0
return 0;
}
if (T->lchild == NULL && T->rchild != NULL || T->lchild != NULL && T->rchild == NULL) {
// 若当前结点的度为1,则度为1的结点个数为n+1
return n1Count(T->lchild, n+1, n0) + n1Count(T->rchild, n+1, n0);
} else { // 若当前结点的度不为1,则度为1的结点个数为n0
return n1Count(T->lchild, n, n0) + n1Count(T->rchild, n, n0);
}
}
其中,n代表当前已经统计出的度为1的结点个数,n0代表当前已经统计出的度不为1的结点个数。初始时,n和n0均为0。在递归过程中,如果当前结点的度为1,则将n+1,否则将n0+1。最终返回n即可得到度为1的结点个数。
相关问题
设计算法按中序输出二叉树中度为2的结点并 使用全局变量n统计度为2的结点个数。 void NodeCount(BiTree *T)
以下是按中序输出二叉树中度为2的结点并统计个数的算法:
```
int n = 0; // 全局变量n用于统计度为2的结点个数
void NodeCount(BiTree *T) {
if (T == NULL) {
return;
}
NodeCount(T->lchild);
if (T->lchild != NULL && T->rchild != NULL) { // 如果左右子树都存在,则说明该结点度为2
printf("%d ", T->data);
n++;
}
NodeCount(T->rchild);
}
```
算法思路:
1. 如果当前结点为空,则直接返回。
2. 向左子树递归。
3. 如果当前结点的左右子树均存在,则说明该结点度为2,输出该结点的值并将全局变量n加1。
4. 向右子树递归。
这样就能按中序输出二叉树中度为2的结点并统计个数了。
设计算法按中序输出二叉树中度为2的结点并使用全局变量n统计度为2的结点个数。 void NodeCount(BiTree *T)
以下是按中序遍历输出二叉树中度为2的节点并统计个数的算法:
```
int n = 0; // 全局变量,记录度为2的结点个数
void NodeCount(BiTree *T) {
if (T == NULL) {
return;
}
NodeCount(T->lchild);
if (T->lchild != NULL && T->rchild != NULL) {
printf("%d ", T->data); // 输出度为2的结点
n++; // 统计度为2的结点个数
}
NodeCount(T->rchild);
}
```
在函数中,首先判断当前节点是否为空,若为空则直接返回。然后递归遍历左子树,遍历完后判断当前节点的度是否为2,若为2则输出节点值并统计个数。最后递归遍历右子树。需要注意的是,全局变量`n`需要在函数外先进行初始化为0。