读书人

这个二叉树那里写错了 不报错 运行不了

发布时间: 2012-02-21 16:26:23 作者: rapoo

这个二叉树那里写错了 不报错 运行不了
struct node
{
int data;
node *left;
node *right;
};
void insert(node *&t,int key)
{
if(t=NULL)
{
t-> data=key;
t-> left=new node;
t-> right=new node;
t-> left=NULL;
t-> right=NULL;
}
else
{
if(key <t-> data) insert(t-> left,key);
else insert(t-> right,key);
}
}
void create(node *&t,int *arr,int n)
{
t=new node;
t=NULL;
insert(t,arr[0]);int pre=arr[0];
for(int i=1;i <n;i++)
{
if(pre!=arr[i])
{
insert(t,arr[i]);
pre=arr[i];
}
}
}
void preorder(node *t)
{
if(t)
{
cout < <t-> data < < " ";
preorder(t-> left);
preorder(t-> right);
}

}
void main()
{
node *t;int arr[]={3,9,7,6,3,2,4,3,2};
create(t,arr,9);
preorder(t);

}

[解决办法]
这是我修改后的程序,在VC6下输出结果是正确的:
#include <iostream>
using namespace std;

struct node
{
int data;
node *left;
node *right;
//至少得初始化啊
node()
{
data = NULL;
left = NULL;
right = NULL;
}
};

void insert(node *&t, int key)
{
if(t-> data ==NULL)
{
t-> data=key;
t-> left=new node;
t-> right=new node;
}
else
{
if(key < t-> data)
insert(t-> left, key);
else
insert(t-> right, key);
}
}

void create(node *& t, int *arr,int n)
{
t = new node;
insert(t, arr[0]);
int pre = arr[0];

for(int i=1;i <n;i++)
{
if(pre!=arr[i])
{
insert(t,arr[i]);
pre=arr[i];
}
}
}

void preorder(node *t)
{
if(t)
{
//不打印空页子节点
if(t-> data)
cout < <t-> data < < " ";
preorder(t-> left);
preorder(t-> right);
}

}
void main(void)
{
node *t;
int arr[] = {3,9,7,6,3,2,4,3,2};
create(t, arr, 9);
preorder(t);
}
[解决办法]
还有你的data = NULL;
这是不好的编程习惯,把BOOL型的值赋给int型变量,最好还是直接用data = 0;或者求其它改变,否则你的代码会让人误会的。
你如果在输入中有0那么你的二叉树将会出错

读书人网 >C++

热点推荐