已知二叉树采用二叉链存储结构存储,请设计一个算法,计算一棵给定二叉树b中的所有分支结点个数。二叉树为“A(B(D,E(G,H)),C(,F(I)))。C语言代码
时间: 2024-11-09 09:29:38 浏览: 25
在C语言中,我们可以使用递归的方式来遍历二叉树并计算分支节点的数量。下面是一个简单的算法设计:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉链表节点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 计算分支节点数量的函数
int countBranchNodes(TreeNode* root) {
if (root == NULL) { // 如果节点为空,返回0
return 0;
}
// 对左子树和右子树分别调用计数函数
int leftBranches = countBranchNodes(root->left);
int rightBranches = countBranchNodes(root->right);
// 分支节点包括当前节点和它的两个子节点
return 1 + leftBranches + rightBranches;
}
int main() {
// 创建给定的二叉树
TreeNode* tree = (TreeNode*)malloc(sizeof(TreeNode));
tree->val = 'A';
tree->left = (TreeNode*)malloc(sizeof(TreeNode));
tree->left->val = 'B';
tree->left->left = (TreeNode*)malloc(sizeof(TreeNode));
tree->left->left->val = 'D';
// ... 继续添加其他子节点
int branchCount = countBranchNodes(tree);
printf("二叉树 %s 中的分支节点总数为:%d\n", "A(B(D,E(G,H)),C(,F(I)))", branchCount);
free(tree); // 释放内存
return 0;
}
```
这个算法首先检查根节点是否为空,如果为空则直接返回0。然后递归地计算左子树和右子树的分支节点数量,最后加上当前节点自身,得到总分支节点数。
阅读全文