30/09/2018, 19:10

Thêm dữ liệu vào cây tìm kiếm nhị phân

Em có code thêm dữ liệu vào cây nhị phân sinh viên như ở dưới, nhưng nó lại không thực hiện hàm insertTree trong main()

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// #include <string>

typedef struct infomation
	{
		char username[30];
		char password[30];
		float diem;
	} info;

typedef struct Node
	{
		info sv;
		struct Node *left;
		struct Node *right;
	} node ;

node *tree = NULL;

void insertTree(char name[30], char pass[30], float point, node *T) {

	if (T == NULL) {
		T = (node*)malloc(sizeof(node));
		T->sv.diem = point;
		strcpy(T->sv.username, name);
		strcpy(T->sv.password, pass);
		T->left = T->right = NULL;
	}
	else
		if (strcmp(T->sv.username, name) > 0) insertTree(name, pass, point, T->left);
	else
		if (strcmp(T->sv.username, name) < 0) insertTree(name, pass, point, T->right);
	else
		if (strcmp(T->sv.username, name) == 0)
		{
			printf("Tai khoan nay da ton tai. Vui long nhap tai khoan khac. 
");
			return;
		}
}

void Inds(node *T) {

	if (T == NULL) return;
	else
	{
		Inds(T->left);
		printf("%20s - %20s  - %8f 
", T->sv.username, T->sv.password, T->sv.diem);
		Inds(T->right);
	}
	printf("
");
}

int main(int argc, char const *argv[])
{
	char name[30] = "hoanghedpsi";
	char pass[30] = "96pbc";
	float point = 9;
	insertTree(name, pass, point, tree);
	Inds(tree);
	return 0;
}

Giải thích giúp em với ạ.

... viết 21:26 ngày 30/09/2018

void insertTree(char name[30], char pass[30], float point, node *T) {

void insertTree(char name[30], char pass[30], float point, node *&T) {

Thử sửa lại như trên xem thử.

Phạm Văn Hoàng viết 21:15 ngày 30/09/2018

Không được ạ. Nó báo lỗi

... viết 21:24 ngày 30/09/2018

Mình copy code của bạn rồi sửa lại như trên thì cpp.sh không báo lỗi mà chạy bình thường.

http://cpp.sh/5jsyh

Phạm Văn Hoàng viết 21:25 ngày 30/09/2018

Em biên dịch trên linux, bằng gcc chứ không phải g++ ạ, hình như trong C không cho phép truyền kiểu này

Gió viết 21:24 ngày 30/09/2018

Sửa lại 1 chút hàm insertTree

node * insertTree(char name[30], char pass[30], float point, node *T) {

    if (T == NULL) {
        T = (node*)malloc(sizeof(node));
        T->sv.diem = point;
        strcpy(T->sv.username, name);
        strcpy(T->sv.password, pass);
        T->left = T->right = NULL;
        return T;
    }
    else
        if (strcmp(T->sv.username, name) > 0){  T->left= insertTree(name, pass, point, T->left); return T;}
    else
        if (strcmp(T->sv.username, name) < 0) {  T->right= insertTree(name, pass, point,  T->right); return T;}
    else
        if (strcmp(T->sv.username, name) == 0)
        {
            printf("Tai khoan nay da ton tai. Vui long nhap tai khoan khac. \n");
            return T;
        }
}

Khi thêm 1 node vào thì sửa lại lệnh

tree=insertTree(name, pass, point, tree);
Bài liên quan
0