关于二叉排序树的问题
[code=C/C++][/code]#include<iostream>
#include<string>
#include<malloc.h>
using namespace std;
typedef int Status;
typedef struct student //学生结构体
{
double grade;//成绩
int no;//学号
string name;//姓名
}student;
typedef struct BiTNode
{
student data; //二叉树元素
BiTNode *lchild,*rchild; //二叉树的左右子树
}BiTNode,*BiTree; //二叉树类型, 二叉树类型指针
Status SearchBST(BiTree T, double key, BiTree f, BiTree &p)
{
// 在根指针T所指二叉排序树中递归地查找其关键字等于key的数据元素,
// 若查找成功,则指针p指向该数据元素结点,并返回TRUE,
// 否则指针p指向查找路径上访问的最后一个结点并返回FALSE,
// 指针f指向T的双亲,其初始调用值为NULL
if (!T)
{
p = f;
return false;
} // 查找不成功
else if (key==T->data.grade) { p = T; return true; } // 查找成功
else if (key<T->data.grade)
return SearchBST(T->lchild, key, T, p); // 在左子树中继续查找
else
return SearchBST(T->rchild, key, T, p); // 在右子树中继续查找
} // SearchBST
Status InsertBST(BiTree &T, student &e)
{// 当二叉排序树T中不存在关键字等于e.key的数据元素时,
// 插入e并返回TRUE,否则返回FALSE
BiTree p,s;
if (!SearchBST(T,e.grade, NULL, p))
{ // 查找不成功
s = (BiTree)malloc(sizeof(BiTNode));
s->data = e;
s->lchild = s->rchild = NULL;
if (!p) T = s; // 插入 s 为新的根结点
else
if (e.grade<p->data.grade) p->lchild=s; // 插入s为左孩子
else p->rchild = s; // 插入 s 为右孩子
return true;
}
else
return false; // 树中已有关键字相同的结点,不再插入
} // Insert BST
在主函数中调用InsertBST这个函数时,其他都没有问题,总是在红色的那行出现问题,删除了那行,程序也能正常运行,在VS2010上面提示是----学生成绩管理.exe 中的 0x77b015de 处有未经处理的异常: 0xC0000005: 写入位置 0xcdcdcdcd 时发生访问冲突----这到底是什么问题,难道二叉树中的data不能直接赋值吗,还有就是我也试过把student这个结构体的值一个一个的赋给data,但是还是出现这个问题,希望哪位高手帮我看看!!!感谢不已!!!
[解决办法]
亲爱的朋友,你这样定义结构体是不行的:
typedef struct BiTNode{ [color=#FF0000]student data; //二叉树元素[/color] BiTNode *lchild,*rchild; //二叉树的左右子树}BiTNode,*BiTree; //二叉树类型, 二叉树类型指针