(1)假设以二叉链作为存储结构,设计一个算法求二叉树中单分支结点个数。用相关数据进行测试。用C语言表示
时间: 2024-11-25 10:11:19 浏览: 6
为了设计一个算法来计算二叉树中单分支节点(即每个节点只有一个孩子节点的节点)的数量,我们可以采用递归的方式遍历二叉树。首先,我们需要定义一个结构体来代表二叉链表的节点:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 判断当前节点是否为单分支节点
int isSingleBranch(TreeNode* node) {
if (node == NULL) return 0; // 空节点不是单分支节点
return node->left == NULL && node->right == NULL; // 只有一个孩子的节点为单分支节点
}
// 计算二叉树中单分支节点的数量
int countSingleBranchNodes(TreeNode* root) {
if (root == NULL) return 0; // 空树没有单分支节点
int singleBranchCount = isSingleBranch(root); // 当前节点是否单分支
singleBranchCount += countSingleBranchNodes(root->left); // 递归左子树
singleBranchCount += countSingleBranchNodes(root->right); // 递归右子树
return singleBranchCount;
}
```
你可以通过创建一个简单的二叉树来进行测试,例如:
```c
TreeNode* createBinaryTree() {
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = 1;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->val = 2;
root->left->left = NULL;
root->left->right = NULL;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->val = 3;
root->right->left = (TreeNode*)malloc(sizeof(TreeNode));
root->right->left->val = 4;
root->right->left->left = NULL;
root->right->left->right = NULL;
root->right->right = NULL;
return root;
}
int main() {
TreeNode* tree = createBinaryTree();
int singleBranches = countSingleBranchNodes(tree);
printf("The number of single branch nodes in the tree is: %d\n", singleBranches);
free(tree);
return 0;
}
```
这个程序会打印出单分支节点的数量,你可以根据需要改变二叉树的结构来测试不同的情况。
阅读全文