我试图找到二进制树的最小值,但输出是地址
I tried to find min of binary tree but output is address
更新
谢谢你的回答。我想我知道这个错误是双重比较造成的。numeric_limits似乎在我的电脑上运行不好。我写了一个简单的函数来比较double,它很有效:
bool compareDouble(double a,double b)
{
if(a-b<-EPSILON)
return true;
else
return false;
}
================
我试着写一个简单的函数来在二叉树中查找min。函数可以很好地运行,但输出是8106336
,它不是树中的值,但看起来像地址。我不明白为什么。
树定义如下,语言为c++
typedef struct myNode* LPNode;
typedef struct myNode Node;
struct myNode
{
double key;
LPNode Left; //left subtree
LPNode Right; //right subtree
};
查找min的函数如下,min的首字母缩写为99999
double minValue(LPNode Root,double min) {
if(Root == NULL)
return min;
if(Root->key < min)
min = Root->key;
min = minValue(Root->Left, min);
min = minValue(Root->Right, min);
return min;
}
所以,我必须显示双重类型的版本:
#include <iostream>
#include <limits>
typedef struct myNode* LPNode;
typedef struct myNode Node;
struct myNode
{
double key;
LPNode Left; //left subtree
LPNode Right; //right subtree
};
double minValue(LPNode Root,double min) {
if(Root == NULL)
return min;
if(Root->key - min < std::numeric_limits<double>::min())
min = Root->key;
min = minValue(Root->Left, min);
min = minValue(Root->Right, min);
return min;
}
int main(int argc, const char * argv[])
{
LPNode node1 = new Node;
LPNode node2 = new Node;
LPNode node3 = new Node;
LPNode node4 = new Node;
LPNode node5 = new Node;
LPNode node6 = new Node;
LPNode node7 = new Node;
node1->key = 10.01;
node2->key = 9.1;
node3->key = 8.2;
node4->key = 7.4;
node5->key = 6.6;
node6->key = 1.1;
node7->key = 12.2;
LPNode root = node1;
node1->Left = node2;
node2->Right = node3;
node2->Left = node4;
node3->Right = node5;
node3->Left = node7;
node7->Right = node6;
double mymin = minValue(root, 99999);
std::cout << mymin;
delete node1;
node1 = NULL;
delete node2;
node2 = NULL;
delete node3;
node3 = NULL;
delete node4;
node4 = NULL;
delete node5;
node5 = NULL;
delete node6;
node6 = NULL;
delete node7;
node7 = NULL;
return 0;
}
首先,不能使用>或<或者==,我使用int重写如下:
#include <iostream>
typedef struct myNode* LPNode;
typedef struct myNode Node;
struct myNode
{
int key;
LPNode Left; //left subtree
LPNode Right; //right subtree
};
int minValue(LPNode Root,int min) {
if(Root == NULL)
return min;
if(Root->key < min)
min = Root->key;
min = minValue(Root->Left, min);
min = minValue(Root->Right, min);
return min;
}
int main(int argc, const char * argv[])
{
LPNode node1 = new Node;
LPNode node2 = new Node;
LPNode node3 = new Node;
LPNode node4 = new Node;
LPNode node5 = new Node;
LPNode node6 = new Node;
LPNode node7 = new Node;
node1->key = 10;
node2->key = 9;
node3->key = 8;
node4->key = 7;
node5->key = 6;
node6->key = 1;
node7->key = 12;
LPNode root = node1;
node1->Left = node2;
node2->Right = node3;
node2->Left = node4;
node3->Right = node5;
node3->Left = node7;
node7->Right = node6;
int mymin = minValue(root, 9999);
std::cout << mymin<< std::endl;
//free node1 ... node7
delete node1;
node1 = NULL;
delete node2;
node2 = NULL;
delete node3;
node3 = NULL;
delete node4;
node4 = NULL;
delete node5;
node5 = NULL;
delete node6;
node6 = NULL;
delete node7;
node7 = NULL;
return 0;
}
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 使用递归的数组的最小值.这是怎么回事
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 在二维数组中查找最小值和最大值?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- C++ 函数,用于查找传入的 N 个数字的平均值、总和、最小值和最大值
- txt 文件中浮点数的最大和最小值
- 余数运算符的等效操作,用于处理低于允许的最小值
- 需要使用模板查找数组的第二个最小和最小值
- CUDA - 将 float3 数组的 (x,y,z) 分量的最小值/最大值分开?
- 查找包含 N 个元素的数组的最小值和最大值
- 错误C++在Visual Studio 2019中使用numeric_limits的长双精度最小值/最大值
- 是否存在用于 C 或 C++ 中常见数学运算(例如最小值、最大值和平均值)的可导入库?
- 如何在 c++ 中创建对的优先级队列.这会弹出具有最小值的元素.默认的弹出最大值
- 将最小值整数转换为无符号长整型
- 查找 std::vector 中的最小值和最大值 std::p air
- 创建一个3x3x3阵列.用0到9之间的随机值填充.输出数组.找出3个最小值和3个最大值的输出
- 我试图找到二进制树的最小值,但输出是地址