Announcement

Collapse
No announcement yet.

Hỏi về cấu trúc cây trong C

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [Ansi C] Hỏi về cấu trúc cây trong C

    PHP Code:
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <time.h>
    struct date
    {
        
    int date;
        
    int month;
        
    int year;
    };
    typedef struct Sinhvien
    {
        
    char MSSV[20];
        
    char name[20];
        
    float diem;
    }
    sv;
    void nhap(sv &x)
    {
        
    printf("\nNhap MSSV:");
        
    fflush(stdin);
        
    printf("\nHo va ten:");
        
    fflush(stdin);
        
    printf("\nNhap diem:");
        
    scanf_s("%f",&x.diem);
    }
    void xuat(sv x)
    {
        
    printf("\n");
        
    printf("%s  | %s | %f  |",x.MSSV,x.name,x.diem);
    }
    typedef struct tagTNode
    {
        
    sv key;//liên kết ngay tại chỗ này
        
    struct tagTNode *pLeft;
        
    struct tagTNode *pRight;
        
    struct tagTNode *pParent;
    }
    TNode;
    typedef TNode *tree;
    void createtree(tree &t)
    {
        
    t=NULL;
    }
    TNode *createnode(sv &x)
    {
        
    TNode *p;//Khai báo biến con trỏ p
        
    p=new TNode;//Cấp phát vùng nhớ
        
    if(p==NULL) exit(1);
        else
        {
            
    p->key=x;
            
    p->pLeft=NULL;
            
    p->pRight=NULL;
        }
        return 
    p;
    }
    TNode *searchNode(tree t,tagTNodex)
    {
        
    TNode *p;
        if(
    t)
        {
            if(
    x==p->key) return t;
            if(
    t->key x)
                return 
    searchNode(t->pLeft,x);
            if(
    t->key <x)
                return 
    searchNode(t->pRight,x);
        }
        return 
    NULL;

    em viết tới đây thì không hiểu sao lại sai nữa! ở cái hàm TNode *searchNode(tree t,tagTNode* x)! 3 điều kiện so sánh trong if đó ạ! Bị lỗi ngay tại đó! Mọi người giải thích và sửa lại cho em được không ạ!:happy: xài VS 2012 nên nó báo lỗi trước luôn :happy:

  • #2
    Originally posted by 12520428 View Post
    PHP Code:
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <time.h>
    struct date
    {
        
    int date;
        
    int month;
        
    int year;
    };
    typedef struct Sinhvien
    {
        
    char MSSV[20];
        
    char name[20];
        
    float diem;
    }
    sv;
    void nhap(sv &x)
    {
        
    printf("\nNhap MSSV:");
        
    fflush(stdin);
        
    printf("\nHo va ten:");
        
    fflush(stdin);
        
    printf("\nNhap diem:");
        
    scanf_s("%f",&x.diem);
    }
    void xuat(sv x)
    {
        
    printf("\n");
        
    printf("%s  | %s | %f  |",x.MSSV,x.name,x.diem);
    }
    typedef struct tagTNode
    {
        
    sv key;//liên kết ngay tại chỗ này
        
    struct tagTNode *pLeft;
        
    struct tagTNode *pRight;
        
    struct tagTNode *pParent;
    }
    TNode;
    typedef TNode *tree;
    void createtree(tree &t)
    {
        
    t=NULL;
    }
    TNode *createnode(sv &x)
    {
        
    TNode *p;//Khai báo biến con trỏ p
        
    p=new TNode;//Cấp phát vùng nhớ
        
    if(p==NULL) exit(1);
        else
        {
            
    p->key=x;
            
    p->pLeft=NULL;
            
    p->pRight=NULL;
        }
        return 
    p;
    }
    TNode *searchNode(tree t,tagTNodex)
    {
        
    TNode *p;
        if(
    t)
        {
            if(
    x==p->key) return t;
            if(
    t->key x)
                return 
    searchNode(t->pLeft,x);
            if(
    t->key <x)
                return 
    searchNode(t->pRight,x);
        }
        return 
    NULL;

    em viết tới đây thì không hiểu sao lại sai nữa! ở cái hàm TNode *searchNode(tree t,tagTNode* x)! 3 điều kiện so sánh trong if đó ạ! Bị lỗi ngay tại đó! Mọi người giải thích và sửa lại cho em được không ạ!:happy: xài VS 2012 nên nó báo lỗi trước luôn :happy:
    Nhìn qua thấy hàm Search của bạn sai trầm trọng rồi.
    PHP Code:
    TNode *searchNode(tree t,tagTNodex

        
    TNode *p// dùng để làm gì
        
    if(t
        { 
            if(
    x==p->key) return t// chưa cấp phát cho p sao dùng được p->key
            
    if(t->key x// x là 1 con trỏ kiểu node mà đem so sánh với 1 giá trị int ???
                
    return searchNode(t->pLeft,x); 
            if(
    t->key <x
                return 
    searchNode(t->pRight,x); 
        } 
        return 
    NULL

    cách của mình, ở đây mình tìm 1 giá trị thay vì tìm 1 node
    PHP Code:
    Node *SearchNode(TREE Tint x)
    {
        
    Node *T;

        while (
    != NULL)
        {
            if (
    == p->key)
            {
                return 
    p;
            }
            else if (
    p->key)
            {
                
    p->pLeft;
            }
            else
            {
                
    p->pRight;
            }
        }

        return 
    NULL;

    Top Best Online - The Best Products Review Website

    Comment

    LHQC

    Collapse
    Working...
    X