用C语言假设以二叉链作为存储结构,设计一个算法求二叉树中单分支结点个数。用相关数据进行测试。
时间: 2024-11-25 18:32:42 浏览: 8
在C语言中,设计一个算法来计算二叉树中单分支节点(也称为叶子节点或终端节点)的数量可以采用深度优先搜索(DFS)的方式。这里我们可以使用递归来遍历整个二叉树。以下是算法的基本思路:
```c
// 定义二叉链表节点结构体
typedef struct TreeNode {
int val; // 节点值
struct TreeNode* left; // 左孩子指针
struct TreeNode* right; // 右孩子指针
} TreeNode;
// 计算单分支节点函数
int countSingleBranchNodes(TreeNode* root) {
if (root == NULL) { // 如果节点为空,返回0
return 0;
}
// 递归检查左右子树
int leftSingle = countSingleBranchNodes(root->left); // 左子树的单分支节点
int rightSingle = countSingleBranchNodes(root->right); // 右子树的单分支节点
// 如果当前节点没有子节点,说明它是一个单分支节点
if (root->left == NULL && root->right == NULL) {
return 1 + leftSingle + rightSingle; // 当前节点自身加左右子树的单分支节点
} else {
return leftSingle + rightSingle; // 否则只考虑子节点的单分支节点
}
}
```
为了测试这个算法,你可以创建一些特定的二叉树结构,例如:
```c
TreeNode* buildTree() {
// 构造示例二叉树(这里省略具体的构造过程)
// 假设构建出如下的二叉树:
// 1
// / \
// 2 3
// / \
// 4 5
// \
// 6
}
int main() {
TreeNode* root = buildTree();
int singleBranchCount = countSingleBranchNodes(root);
printf("单分支节点个数: %d\n", singleBranchCount);
// 清理内存(如果需要)
destroyTree(&root);
return 0;
}
```
运行上述代码后,会得到单分支节点的数量。记得根据实际构建的二叉树调整`buildTree`函数中的内容。
阅读全文