假设二叉树中的每个结点值为单个字符,采用二叉链储存结构储存。设计一个C++算法计算一棵给定的二叉树bt中的所有单分支节点个数
时间: 2024-11-25 11:19:49 浏览: 12
数据结构与算法-实验五 huffman树
假设我们有一个二叉树数据结构,其中每个节点包含一个字符值和两个指向左右子节点的指针。为了计算所有单分支节点(即只有左孩子或只有右孩子的节点),我们可以使用递归遍历的方式来实现。以下是C++的一个简单算法:
```cpp
#include <iostream>
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char v) : val(v), left(nullptr), right(nullptr) {}
};
int countSingleBranchNodes(TreeNode* bt) {
if (bt == nullptr) return 0; // 如果节点为空,则返回0
// 递归地检查左子树和右子树
int leftBranches = bt->left ? 1 + countSingleBranchNodes(bt->left) : 0; // 左边有分支则计数+1
int rightBranches = bt->right ? countSingleBranchNodes(bt->right) : 0; // 右边无分支
// 如果当前节点只有一个分支,返回1;如果有两边都分支或无分支,返回0
return bt->left && !bt->right ? leftBranches : bt->right && !bt->left ? rightBranches : 0;
}
int main() {
// 你可以在这里实例化并测试你的二叉树
TreeNode* bt = ...;
int result = countSingleBranchNodes(bt);
std::cout << "单分支节点总数: " << result << std::endl;
return 0;
}
```
这个函数`countSingleBranchNodes`会返回整个二叉树中单分支节点的数量。如果需要处理多个二叉树,只需传递不同的根节点即可。
阅读全文