首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这个二叉树那里写错了 不报错 运行不了解决办法

2012-02-21 
这个二叉树那里写错了 不报错 运行不了structnode{intdatanode*leftnode*right}voidinsert(node*&t,in

这个二叉树那里写错了 不报错 运行不了
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那么你的二叉树将会出错

热点排行