Giúp em về cấu trúc cây Sinh viên này với

Em không hiểu sao bài tập này của em lại chạy bị lỗi. Em đã debug nhưng vẫn không hiểu nó bị lỗi đó là như thế nào. Các anh coi dùm em nha

PS: Vừa tìm ra lỗi nhờ thằng bạn.

#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <string>
using namespace std;
typedef struct ssv
{
	char *HoTen,*GioiTinh;
	long NamSinh;
	double MSSV;
	float ToanA2, CTDL, KTMT, LiA2, LiA3, DBT;
} sv;
typedef struct SVNode
{
	sv info;
	struct SVNode *SVRight, *SVLeft;
} *SVTREE;
void CreateSVNode(SVNode *&a, sv x)
{
	a=new SVNode;
	if (a=NULL)
	{
		cout<<"Loi bo nho khong the tao cay. Tat chuong trinh va kiem tra loi cua HDD."<<endl;
		exit(1);
	}
	else
	{
		a->info=x;
		a->SVLeft=a->SVRight=NULL;
	}
}
void CreateSVTree(SVTREE &a)
{
	a=NULL;
}
int AddSVNode(SVTREE &a, sv x)
{
	if (a)
	{
		if (a->info.MSSV==x.MSSV) 
		{
			cout<<"Sinh vien vua nhap da bi trung.";
			return 0;
		}
		if (a->info.MSSV>x.MSSV) return AddSVNode(a->SVLeft,x);
		else return AddSVNode(a->SVRight,x);
	}
	CreateSVNode(a,x);
	return 1;
}
void LNR(SVTREE a, int &n)
{
	if (a!=NULL)
	{
		LNR(a->SVLeft,n);
		n++;
		cout<<"SINH VIEN THU "<<n<<endl;
		cout<<"  Ho va ten: "<<a->info.HoTen<<endl;
		cout<<"  MSSV: "<<a->info.MSSV<<endl;
		cout<<"  Nam sinh: "<<a->info.NamSinh<<endl;
		cout<<"  Gioi tinh: "<<a->info.GioiTinh<<endl;
		cout<<"  Diem Toan A2: "<<a->info.ToanA2<<endl;
		cout<<"  Diem Li A2:   "<<a->info.LiA2<<endl;
		cout<<"  Diem Li A3:   "<<a->info.LiA3<<endl;
		cout<<"  Diem KTMT:    "<<a->info.KTMT<<endl;
		cout<<"  Diem CTDL&GT: "<<a->info.CTDL<<endl;
		cout<<"  Diem TRUNG BINH: "<<a->info.DBT<<endl;
		LNR(a->SVRight,n);
	}
}
void main()
{
	cout<<"Copyright (c) 2012 - Nguyen Van Uy."<<endl<<endl<<"Welcome to Sinh Vien Tree Struct Program v1.0 "<<endl<<endl;
	SVTREE SVT, svtam;
	int n=0;
	sv sinhvien;
	sinhvien.HoTen=(char*) malloc(50*sizeof(char));
	sinhvien.GioiTinh=(char*) malloc(3*sizeof(char));
	char *b,c,gt;
	int g;
	b=(char*) malloc(50*sizeof(char));
	CreateSVTree(SVT);
	CreateSVTree(svtam);
	cout<<"NHAP VAO THONG TIN SINH VIEN THU 1 (Nhan ESC de exit nhap): "<<endl<<endl;
	do
	{
		cout<<"Ho va ten:                ";
		c=getche();
		if(c==27) break;
		else 
		{
			g=sprintf(sinhvien.HoTen,"%c",c);
			gets(b);
			strcat(sinhvien.HoTen,b);
			free(b);
			cout<<"MSSV:                     "; cin>>sinhvien.MSSV;
			cout<<"Gioi tinh (1-Nam, 0-Nu):  "; 
				do
				{
					gt=getch();
					getch();
					if (gt=='1') 
					{
						sinhvien.GioiTinh="Nam";
						cout<<"Nam"<<endl;
					}
					else if (gt=='0')
					{   
						sinhvien.GioiTinh="Nu";
						cout<<"Nu"<<endl;
					}
				}while(gt==0 || gt==1);
			cout<<"Nam sinh:                 ";cin>>sinhvien.NamSinh;
			cout<<"Diem Toan A2:             ";cin>>sinhvien.ToanA2;
			cout<<"Diem Li A2:               ";cin>>sinhvien.LiA2;
			cout<<"Diem Li A3:               ";cin>>sinhvien.LiA3;
			cout<<"Diem KTMT:                ";cin>>sinhvien.KTMT;
			cout<<"Diem CTDL&GT:             ";cin>>sinhvien.CTDL;
		};
		sinhvien.DBT=(sinhvien.ToanA2 + sinhvien.LiA2 + sinhvien.LiA3 + sinhvien.KTMT + sinhvien.CTDL)/5;
		n++;
		if (AddSVNode(svtam,sinhvien)==0) 
		{
			//n=n-1;
			cout<<"Sinh vien vua nhap da bi trung. "<<endl<<"NHAP LAI THONG TIN SINH VIEN THU "<<n<<" (Nhan ESC de exit nhap): "<<endl<<endl;
		}
		else
		{
			n++;
			SVT=svtam;
			cout<<"NHAP VAO THONG TIN SINH VIEN THU "<<n<<" (Nhan ESC de exit nhap): "<<endl<<endl;
		}
	}while (1);
	int k=0;
	LNR(SVT,k);
	getch();
}




/* sprintf example */
//#include <stdio.h>
//
//int main ()
//{
//  char buffer [50];
//  int n, a=5, b=3;
//  n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
//  printf ("[%s] is a %d char long string
",buffer,n);
//  return 0;
//}

up giùm bạn ấy! C++ kìa…

Cấu trúc SVnode sao lại là *SVTREE. Sao không code như bình thường . Sử dụng nhiều cái quá chi cho rắc rối.Vừa sài new vừa sài malloc Sử dụng nhiều con trỏ mà còn sài tham chiếu con trỏ *&a .Đề bài có yêu cầu đến mức đó không ?

mình đọc trên xuống mình thấy bạn sai ngay hàm thêm node nha. giống như cây bình thường nếu T!=NULL thì tim vị trí thế còn nếu T==NULL thì khi đó cho info=x; và cho svleft=svright=NULL nhé. không có chuyện tạo 1 node mới mà lại không có liên kết gì đâu bạn. mà trong cây thì không phải tạo node mơi giống như trong danh sách liên kết đâu bạn nhé. Còn mấy hàm xuất của bạn thì mình cũng chưa bao giờ động đến nên cũng không biết. Tại sao bạn lại không code giống như 1 chương trình bình thường mà mình đã học nhi, như vậy thì anh em còn sửa được chứ, đằng này bạn code cái gì mà mình cũng chưa thây trong sách viết nên chịu thôi.kaka tự tìm hiểu thêm nhé.

rảnh rỗi sửa luôn. tự tìm thêm để sửa cho đúng nhé

#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <string>
using namespace std;
typedef struct ssv
{
	char *HoTen,*GioiTinh;
	long NamSinh;
	double MSSV;
	float ToanA2, CTDL, KTMT, LiA2, LiA3, DBT;
} sv;
typedef struct SVNode
{
	sv info;
	struct SVNode *SVRight, *SVLeft;
} SVNode;
typedef SVNode *SVTREE -> // (như thế này thì mới là cây bạn nhé)
void CreateSVNode(SVNode *&a, sv x)  // Cây thì không cần dùng hàm này
{
	a=new SVNode;
	if (a=NULL)
	{
		cout<<"Loi bo nho khong the tao cay. Tat chuong trinh va kiem tra loi cua HDD."<<endl;
		exit(1);
	}
	else
	{
		a->info=x;
		a->SVLeft=a->SVRight=NULL;
	}
}
void CreateSVTree(SVTREE &a)  // theo mình biết thì cây cũng không dùng hàm này nhé
{
	a=NULL;
}
int AddSVNode(SVTREE &a, sv x)
{
	if (a)
	{
		if (a->info.MSSV==x.MSSV) 
		{
			cout<<"Sinh vien vua nhap da bi trung.";
			return 0;
		}
		if (a->info.MSSV>x.MSSV) return AddSVNode(a->SVLeft,x);
		else return AddSVNode(a->SVRight,x);
	}
// đây là phần phải sửa nhé
	a->info=x;
	a->SVleft=a->SVright=NULL;
        return 1;
}
void LNR(SVTREE a, int &n)
{
	if (a!=NULL)
	{
		LNR(a->SVLeft,n);
		n++;
		cout<<"SINH VIEN THU "<<n<<endl;
		cout<<"  Ho va ten: "<<a->info.HoTen<<endl;
		cout<<"  MSSV: "<<a->info.MSSV<<endl;
		cout<<"  Nam sinh: "<<a->info.NamSinh<<endl;
		cout<<"  Gioi tinh: "<<a->info.GioiTinh<<endl;
		cout<<"  Diem Toan A2: "<<a->info.ToanA2<<endl;
		cout<<"  Diem Li A2:   "<<a->info.LiA2<<endl;
		cout<<"  Diem Li A3:   "<<a->info.LiA3<<endl;
		cout<<"  Diem KTMT:    "<<a->info.KTMT<<endl;
		cout<<"  Diem CTDL>: "<<a->info.CTDL<<endl;
		cout<<"  Diem TRUNG BINH: "<<a->info.DBT<<endl;
		LNR(a->SVRight,n);
	}
}
void main()
{
	cout<<"Copyright (c) 2012 - Nguyen Van Uy."<<endl<<endl<<"Welcome to Sinh Vien Tree Struct Program v1.0 "<<endl<<endl;
	SVTREE SVT, svtam;
	int n=0;
	sv sinhvien;
	sinhvien.HoTen=(char*) malloc(50*sizeof(char));
	sinhvien.GioiTinh=(char*) malloc(3*sizeof(char));
	char *b,c,gt;
	int g;
	b=(char*) malloc(50*sizeof(char));
	CreateSVTree(SVT);
	CreateSVTree(svtam);
	cout<<"NHAP VAO THONG TIN SINH VIEN THU 1 (Nhan ESC de exit nhap): "<<endl<<endl;
	do
	{
		cout<<"Ho va ten:                ";
		c=getche();
		if(c==27) break;
		else 
		{
			g=sprintf(sinhvien.HoTen,"%c",c);
			gets(b);
			strcat(sinhvien.HoTen,b);
			free(b);
			cout<<"MSSV:                     "; cin>>sinhvien.MSSV;
			cout<<"Gioi tinh (1-Nam, 0-Nu):  "; 
				do
				{
					gt=getch();
					getch();
					if (gt=='1') 
					{
						sinhvien.GioiTinh="Nam";
						cout<<"Nam"<<endl;
					}
					else if (gt=='0')
					{   
						sinhvien.GioiTinh="Nu";
						cout<<"Nu"<<endl;
					}
				}while(gt==0 || gt==1);
			cout<<"Nam sinh:                 ";cin>>sinhvien.NamSinh;
			cout<<"Diem Toan A2:             ";cin>>sinhvien.ToanA2;
			cout<<"Diem Li A2:               ";cin>>sinhvien.LiA2;
			cout<<"Diem Li A3:               ";cin>>sinhvien.LiA3;
			cout<<"Diem KTMT:                ";cin>>sinhvien.KTMT;
			cout<<"Diem CTDL>:             ";cin>>sinhvien.CTDL;
		};
		sinhvien.DBT=(sinhvien.ToanA2 + sinhvien.LiA2 + sinhvien.LiA3 + sinhvien.KTMT + sinhvien.CTDL)/5;
		n++;
		if (AddSVNode(svtam,sinhvien)==0) 
		{
			//n=n-1;
			cout<<"Sinh vien vua nhap da bi trung. "<<endl<<"NHAP LAI THONG TIN SINH VIEN THU "<<n<<" (Nhan ESC de exit nhap): "<<endl<<endl;
		}
		else
		{
			n++;
			SVT=svtam;
			cout<<"NHAP VAO THONG TIN SINH VIEN THU "<<n<<" (Nhan ESC de exit nhap): "<<endl<<endl;
		}
	}while (1);
	int k=0;
	LNR(SVT,k);
	getch();
}




/* sprintf example */
//#include <stdio.h>
//
//int main ()
//{
//  char buffer [50];
//  int n, a=5, b=3;
//  n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
//  printf ("[%s] is a %d char long string
",buffer,n);
//  return 0;
//}