相同的测试用例,但代码块和Ideone的输出不同
Same test case but different output on codeblocks and Ideone
好的,我最近开始尝试与树相关的问题,有一个简单的代码可以找到二进制搜索树的高度。它在我的CodeBlocks系统上运行良好,但当我在在线IDE上编译它时,它会给出不同的输出(每次2个)。例如在码块上
4
2 1 3 4
输出3
但在线IDE(Ideone,Codechef,Hackerearth)
4
2 1 3 4
给出输出2
不仅是这个测试用例,所有的测试用例都在线给出输出2。请帮忙!!
代码:
#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct node
{
struct node* left;
long value;
struct node* right;
}tnode;
tnode* insertnode(long,tnode*);
tnode* createnode(long);
int height(tnode*);
void preorder(tnode*);
int main()
{
int n,i;
cin>>n;
long input[n];
for(i=0;i<n;i++)
{
cin>>input[i];
}
tnode *root=(tnode*)malloc(sizeof(tnode));
root=NULL;
//cout<<"HI"<<endl;
root=insertnode(input[0],root);
for(i=1;i<n;i++)
{
insertnode(input[i],root);
}
//preorder(root);
cout<<height(root)<<endl;
return 0;
}
tnode* insertnode(long value,tnode* node)
{
if(node==NULL)
{
return createnode(value);
}
else if(value<node->value)
{
node->left=insertnode(value,node->left);
}
else if(value>node->value)
{
node->right=insertnode(value,node->right);
}
}
tnode* createnode(long value)
{
tnode* temp=(tnode*)malloc(sizeof(tnode));
temp->value=value;
temp->left=temp->right=NULL;
return temp;
}
int height(tnode* node)
{
int lht,rht;
if(node==NULL)
{
return 0;
}
else
{
lht=height(node->left);
rht=height(node->right);
if(lht>=rht)
{
return lht+1;
}
else
{
return rht+1;
}
}
}
void preorder(tnode* temp)
{
if(temp!=NULL)
{
cout<<temp->value<<" ";
preorder(temp->left);
preorder(temp->right);
}
}
提前谢谢你,如果我在提问时犯了任何错误,我深表歉意。
主要问题是insertnode
。它被声明为返回tnode *
,但并不总是这样:如果node
是NULL
,它会返回return createnode(value);
,但在所有其他情况下,它不会返回值。你的编译器应该大声抱怨。
因此:
node->right=insertnode(value,node->right);
如果node->right
最初是NULL
,则此行会为其分配一个新节点。但如果不是NULL
,node->right
就会被一个垃圾值覆盖。
其他问题:
这里有内存泄漏:
tnode *root=(tnode*)malloc(sizeof(tnode)); root=NULL;
malloc
返回的指针丢失,因为第二行用NULL
覆盖它。typedef
在C++中手动使用结构类型是没有意义的。执行struct node { ... };
时,会自动获得定义的两个名称:struct node
和node
。不需要typedef
。不建议在C++中使用
malloc
。CCD_ 18(或CCD_;某种智能指针会更好;最好是一些为您处理内存管理的容器类型。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 相同的测试用例,但代码块和Ideone的输出不同
- 相同输入的IDEONE和CODEBLOCK中的不同输出(小阶乘)
- 尝试拆分循环链表.显示输出但崩溃.在 IDEone 中显示运行时错误
- ideone和Codeforces中相同程序的不同输出
- 为什么这两个程序的输出在codeforce上是不同的,而在ideone上是相同的?
- 我的c++代码在ideone和codeforces自定义测试中提供了两种不同的输出