• #1
    Tham gia
    18-04-2011
    Bài viết
    1
    Like
    0
    Thanked 0 Times in 0 Posts

    cây nhị phân co kiểu dữ liệu là struct

    Anh chị giúp dùm em bài này với
    Tạo cây nhị phân có nút là struct hàng hóa( Mahh, SoLuong, Ten, DonGia)
    Thêm, xóa, sửa, duyệt, tìm kiếm (duyệt chỉ cần duyệt Mahh)

    anh chị nào sữa dùm em bài này đi

    #include <iostream.h>
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    struct hanghoa
    {
    int mahh, soluong;
    char tenhh[30];
    float dongia;
    };
    typedef hanghoa HH;
    struct Node{
    hanghoa Data;
    Node *left;
    Node *right;
    };
    typedef Node *NODEPTR;

    void init(NODEPTR &proot)
    {
    proot=NULL;
    }
    int Empty(NODEPTR proot)
    {
    if(proot=NULL)
    return 1;
    else
    return 0;
    }
    NODEPTR GetNode(HH x)
    {
    NODEPTR p=new Node;
    p ->Data=x;
    p ->left=p ->right=NULL;
    return p;
    }
    void them(NODEPTR &proot,HH x)
    {
    if(Empty(proot)==1)
    {
    proot=GetNode(x);
    }
    else
    {
    if(x.mahh==proot->Data.mahh)
    {
    cout<<"Hang hoa nay da co roi";
    }
    else if(x.mahh<proot->Data.mahh)
    them(proot->left,x);
    else
    them(proot->right,x);
    }

    }
    int nhap(NODEPTR &proot,HH x)
    {
    do{
    cout<<"Nhap ma hh: ";
    cin>>proot.Data.mahh;
    if((proot.Data.mahh)<=0)
    return;
    cout<<"Nhap ten hh:";
    cin>>proot.Data.tenhh;
    cout<<"Nhap sl";
    cin>>proot.Data.soluong;
    cout<<"Nhap don gia";
    cin>>proot.Data.dongia;
    them(proot,x);
    }while((proot.Data.mahh)<=0);
    }
    void xuat(NODEPTR &proot,HH x)
    {
    while(proot!=NULL)
    {
    cout<<"Thong tin vua nhap";
    cout<<"Ma hh: "<<proot->Data.mahh;
    cout<<"Nhap ten hh: "<<proot->Data.tenhh;
    cout<<"Nhap sl: "<<proot->Data.soluong;
    cout<<"Nhap don gia: "<<proot->Data.dongia;
    }
    }
    int Tim_hh(NODEPTR proot,HH x)
    {
    if(proot!= NULL)
    {
    if(proot->Data.mahh==x.mahh)
    return 1;
    else{
    if(proot->Data.mahh>x.mahh)
    return Tim_hh(proot->left,x);
    else
    return Tim_hh(proot->right,x);
    }
    }
    else
    return 0;
    }
    void Xoa(NODEPTR &proot,HH x)
    {
    NODEPTR q,r;
    if(proot==NULL)
    cout<<"\nKhong tim thay hang hoa nay";
    else if(x.mahh<proot->Data.mahh)
    Xoa(proot->left,x);
    else if(x.mahh>proot->Data.mahh)
    Xoa(proot->right,x);
    else
    {
    q=proot;
    if(proot->right==NULL)
    proot=proot->left;
    else if(proot->left==NULL)
    proot=proot->right;
    else{
    for(r=q->left;r->right;r=r->right)
    r->right=q->right;
    proot=q->left;
    }
    }
    delete q;
    }
    void NLR(NODEPTR proot)
    {
    if(proot!=NULL)
    {
    cout<<proot->Data.mahh<<" ";
    NLR(proot->left);
    NLR(proot->right);
    }
    }
    void LNR(NODEPTR proot)
    {
    if(proot!=NULL)
    {
    LNR(proot->left);
    cout<<proot->Data.mahh<<" ";
    LNR(proot->right);
    }
    }
    void LRN(NODEPTR proot)
    {
    if(proot!=NULL)
    {
    LRN(proot->left);
    LRN(proot->right);
    cout<<proot->Data.mahh<<" ";
    }
    }
    int Dem_hhoa(NODEPTR proot)
    {
    if(proot==NULL)
    return 0;
    else
    return (1 + Dem_hhoa(proot ->left)+Dem_hhoa(proot ->right));
    }
    void main()
    {
    int n,k;
    NODEPTR proot;

    HH x;
    do
    {
    cout<<"Nhap so luong hang hoa can nhap: ";
    cin>>n;
    }
    while (n<=0||n>100);
    nhap(proot,x);
    xuat(proot,x);
    cout<<"Nhap hang hoa can them vao cay: ";
    cin>>k;
    them(proot,x);
    cout<<"Cay sau khi them vao: ";
    xuat(proot,x);
    cout<<"Nhap hang hoa can xoa: ";
    Xoa(proot,x);
    xuat(proot,x);
    cout<<"Duyet hang hoa theo NLR: ";
    NLR(proot);
    xuat(proot,x);
    cout<<"Duyet hang hoa theo LNR: ";
    LNR(proot);
    xuat(proot,x);
    cout<<"Duyet hang hoa theo LRN: ";
    LRN(proot);
    xuat(proot,x);
    cout<<"So luong hang hoa: ";
    Dem_hhoa(proot);
    cout<<"Nhap hang hoa can tim: ";
    cin>>k;
    if(Tim_hh( proot,x)==1)
    cout<<"Da tim thay: ";
    else
    cout<<"khong tim thay.";
    xuat(proot,x);
    }
    Được sửa bởi banto515 lúc 20:38 ngày 26-04-2011
    Quote Quote

  • Chưa có bình luận nào, bạn hãy là người đầu tiên bình luận cho bài viết này.
    Bạn cần Đăng nhập để bình luận bài viết
    ĐĂNG KÝ THIẾT KẾ

    CHAT VỚI

    X HOME - THINKDIFFERENTLY * NGÔI NHÀ ĐẶC BIỆT - SUY NGHĨ KHÁC BIỆT chuyên thiết kế, thi công xây dựng, nội thất, sơn bả thạch cao, mỹ thuật, sân vườn tiểu cảnh, cây cảnh, cây công trình. Hotline: 0965.163.169 - 0975.163.169 - 0949.163.169 - 0902.112.114 - 0915.511.577