·已知二叉树采用二叉链存储结构存储,请设计一个算法,计算一棵给定二叉树b中的所有分支结点个数。二叉树为“A(B(D,E(G,H)),C(,F(I)))”。用C程序结构写出代码
时间: 2024-11-09 19:29:03 浏览: 42
二叉树中两结点最近的共同祖先算法
5星 · 资源好评率100%
在C语言中,我们可以使用递归的方式来解决这个问题,遍历二叉树并统计所有的分支节点。首先,我们需要定义二叉链表节点的数据结构:
```c
typedef struct TreeNode {
char value;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
```
接下来是一个计算分支节点个数的函数`countBranchNodes(TreeNode* root)`:
```c
int countBranchNodes(TreeNode* root) {
if (root == NULL) { // 如果节点为空,返回0
return 0;
}
int leftBranches = root->left ? 1 + countBranchNodes(root->left) : 0; // 计算左子树的分支数
int rightBranches = root->right ? 1 + countBranchNodes(root->right) : 0; // 计算右子树的分支数
// 分支节点是指有左右子节点的节点
return leftBranches + rightBranches;
}
```
最后,你可以通过创建一个`main()`函数来测试这个函数,给定的二叉树结构可以用字符串表示并转换成实际的二叉树。
```c
int main() {
const char* treeStr = "A(B(D,E(G,H)),C(F(I)))";
// 根据treeStr构建实际二叉树结构
TreeNode* root = buildTreeFromStr(treeStr); // 自定义函数用于解析字符串
int branchCount = countBranchNodes(root);
printf("给定二叉树中有 %d 个分支节点.\n", branchCount);
return 0;
}
```
请注意,这里假设`buildTreeFromStr()`函数能够将输入的字符串转换为二叉树结构,这通常需要额外的处理来解析字符序列。在这个函数里你需要根据实际情况对输入的字符串进行分割,并创建相应的`TreeNode`实例。如果你需要具体的代码示例来完成这个`buildTreeFromStr()`,我可以进一步帮助你编写。现在先关注`countBranchNodes`函数。
阅读全文