假设二叉树中的每个结点值为单个字符,采用二叉链存储结构存储。设计一个算法,计算一棵给定二叉树bt中的所有单分支结点个数。c++写出完整代码
时间: 2024-12-18 07:28:01 浏览: 16
假设二叉树的节点结构包含一个字符值、一个指向左孩子的指针和一个指向右孩子的指针,我们可以遍历整个二叉树,并检查每个节点是否只有一个子节点。如果是,就增加计数器。以下是一个简单的C++函数来完成这个任务:
```cpp
#include <iostream>
// 定义二叉树节点结构
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
};
int countSingleBranchNodes(TreeNode* bt) {
if (!bt) return 0; // 如果根节点为空,则返回0
int singleBranchCount = 0;
// 递归遍历左右子树
if (!bt->left && !bt->right) // 只有一个子节点的情况
singleBranchCount++;
singleBranchCount += countSingleBranchNodes(bt->left); // 左孩子情况
singleBranchCount += countSingleBranchNodes(bt->right); // 右孩子情况
return singleBranchCount;
}
// 示例如何使用该函数
int main() {
// 创建一个示例二叉树
TreeNode* bt = new TreeNode('A');
bt->left = new TreeNode('B');
bt->right = new TreeNode('C');
bt->left->left = nullptr;
bt->left->right = new TreeNode('D'); // 单分支节点
std::cout << "单分支节点数: " << countSingleBranchNodes(bt) << std::endl;
delete bt; // 释放内存
return 0;
}
```
在这个例子中,`countSingleBranchNodes` 函数会返回给定二叉树中单分支节点的数量。它首先检查当前节点是否本身就是一个单分支节点,然后递归地计算左右子树中的单分支节点。
阅读全文