编程求二叉树结点个数、结点的和、结点数据值的最大最小值。 若void create sz(bitnode **Tintalintn)创建二叉树数组a初始化如下 int a[20]={1,2,4,8,0,0,9,0,0,5,0,0,3,6,0,0,7,0,0}
时间: 2024-10-23 18:11:42 浏览: 7
erchashu.rar_erchashu_统计 二叉树 结点个数
5星 · 资源好评率100%
在给定的二叉树结构中,`bitnode **Tintalintn`表示一个指向整型节点指针的二维数组,数组 `a` 初始化了二叉树的非空节点值。我们可以按照二叉搜索树的特点计算各个属性:
1. **结点个数**:遍历二叉树以计算结点总数。可以采用递归或迭代的方式,从根节点开始,对于每个非空节点,左子树的结点数加上右子树的结点数加一。
```cpp
int countNodes(bitnode *root) {
if (root == nullptr) return 0;
return 1 + countNodes(root->left) + countNodes(root->right);
}
```
2. **结点的和**:同样通过递归遍历,对每个节点的值累加。
```cpp
int sumOfNodes(bitnode *root) {
if (root == nullptr) return 0;
return root->data + sumOfNodes(root->left) + sumOfNodes(root->right);
}
```
3. **结点数据值的最大最小值**:在访问过程中记录当前最大值(初始化为第一个节点值),遇到新大值就更新;同时记录当前最小值,遇到更小的值则更新。
```cpp
pair<int, int> findMinMax(bitnode *root, bool isMin = true) {
if (root == nullptr) return {INT_MIN, INT_MAX};
pair<int, int> leftResult = findMinMax(root->left, !isMin);
pair<int, int> rightResult = findMinMax(root->right, !isMin);
if (isMin && root->data < leftResult.first) {
return {root->data, leftResult.second};
} else if (!isMin && root->data > rightResult.first) {
return {rightResult.first, root->data};
}
return {leftResult.first, leftResult.second};
}
// 要找最小值,调用 findMinMax(root, true); 要找最大值,调用 findMinMax(root, false);
```
阅读全文