假设二叉树采用左右孩子指针存储结构,即其结点数据类型描述为: struct TreeNode ( int data ://数据域 struct TreeNode * left ,* right //指向其左右孩子结点试编写两个函数,要在一棵树 Tree 中,分别找出最小值和次小值。该树不允许值相同的结点,如果该树为空或者只有一个节点,则没有次小值。函数原形如下: bool fnGetMin1( struct TreeNode " Tree , int &min1)://找最小值 bool fnGetMin2(…)//找起次小值,函数名用fnGetMin2,参数表自定如需要用到极大值,用 MAX 代替
时间: 2024-03-10 12:47:38 浏览: 21
好的,针对您的问题,我可以提供以下的代码实现:
```
bool fnGetMin1(struct TreeNode* Tree, int& min1) {
if (Tree == NULL) {
return false;
}
while (Tree->left != NULL) {
Tree = Tree->left;
}
min1 = Tree->data;
return true;
}
bool fnGetMin2(struct TreeNode* Tree, int& min2) {
if (Tree == NULL || (Tree->left == NULL && Tree->right == NULL)) {
return false;
}
int min1;
fnGetMin1(Tree, min1);
min2 = MAX;
fnGetMin2Helper(Tree, min1, min2);
if (min2 == MAX) {
return false;
} else {
return true;
}
}
void fnGetMin2Helper(struct TreeNode* Tree, int min1, int& min2) {
if (Tree == NULL) {
return;
}
if (Tree->data > min1 && Tree->data < min2) {
min2 = Tree->data;
} else if (Tree->data == min1) {
fnGetMin2Helper(Tree->left, min1, min2);
fnGetMin2Helper(Tree->right, min1, min2);
} else if (Tree->data < min1) {
fnGetMin2Helper(Tree->right, min1, min2);
} else {
fnGetMin2Helper(Tree->left, min1, min2);
}
}
```
其中,`fnGetMin1` 函数用于找到树中的最小值,`fnGetMin2` 函数用于找到次小值。`fnGetMin2Helper` 函数是 `fnGetMin2` 的辅助函数,用于递归地查找次小值。
如果您对这段代码有任何疑问,请随时向我提问。