Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Tìm kiếm 1 phần tử trong cây nhị phân tìm kiếm

  1. #1
    Ngày gia nhập
    04 2020
    Bài viết
    6

    Mặc định Tìm kiếm 1 phần tử trong cây nhị phân tìm kiếm

    Chào mọi người. Mình có 1 vấn đề thế này:
    Mình có 1 cây nhị phân tìm kiếm với các phần tử là độc giả của 1 thư viện. Các độc giả được thêm vào cây dựa theo mã thẻ của họ (int). Mình có viết hàm dùng để thực hiện chức năng mượn sách như sau:
    C++ Code:
    1. bool Kiem_tra_trung_ma_the(TREE t, int x) // Ham dung de kiem tra xem doc gia do co trong thu vien khong
    2. {
    3.     if (t == NULL)
    4.     {
    5.         return false; // Cay rong => Khong co
    6.     }
    7.     else
    8.     {
    9.          // Neu phan tu can tim kiem ma nho hon node goc thi duyet sang trai de tim
    10.         if (x < t->data.Ma_the)
    11.         {
    12.             Kiem_tra_trung_ma_the(t->pLeft, x);
    13.         }
    14.         // Tuong tu o tren, duyet sang ben phai
    15.         else if (x > t->data.Ma_the)
    16.         {
    17.             Kiem_tra_trung_ma_the(t->pRight, x);
    18.         }
    19.         else
    20.         {
    21.             return true; // Da tim ra
    22.         }
    23.     }
    24. }
    25. void Muon_sach(TREE &t, DS_DAU_SACH &ds_dau_sach, DS_DANH_MUC_SACH &ds_dms)
    26. {
    27.     int a;
    28.     cout << "Nhap ma the doc gia: ";
    29.     cin >> a;
    30.     if (Kiem_tra_trung_ma_the(t ,a) == false)
    31.     {
    32.         cout << "Doc gia khong ton tai.\n";
    33.         return;
    34.     }
    35.     else
    36.     {
    37.         cout << "\tTHONG TIN DOC GIA\n";
    38.         Xuat_thong_tin_1_doc_gia(t->data);
    39.         Xuat_danh_sach_sach_dang_muon_cua_1_doc_gia(t->data.ds_muon_tra_cua_doc_gia, t);
    40.         // Xu li linh tinh
    41.     }
    42. }
    Trong phần mượn sách, khi mình nhập vào mã thẻ thì nó lại không trả về đúng độc giả có mã thẻ mình nhập mà là của người khác.
    Chẳng hạn có 3 độc giả với mã thẻ lần lượt là 10530, 13076, 18332. Mình nhập vào 13076 thì nó lại trả ra là 10530.
    Cho mình hỏi là lỗi nằm ở đâu vậy? Ở phần duyệt cây để tìm ra phần tử? Nếu là vậy thì phải sửa như thế nào?

    - - - Nội dung đã được cập nhật ngày 05-05-2020 lúc 08:08 AM - - -

    À thôi mình fix được rồi ạ )) cảm ơn mọi người ))
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Đã được chỉnh sửa lần cuối bởi section0000 : 05-05-2020 lúc 06:36 AM.

  2. #2
    Ngày gia nhập
    10 2011
    Bài viết
    554

    Lỗi chỗ:
    - Hàm tìm kiếm (Kiem_tra_trung_ma_the () ) chỉ return True/False mà không cho biết vị trí phần tử (con trỏ).
    - Trong khi hàm xuất ( Xuat_thong_tin_1_doc_gia(), Xuat_danh_sach_sach_dang_muon_cua_1_doc_gia() ) luôn luôn nhận argument là con trỏ t ( node gốc ).
    -------
    Cách sửa:
    - Kiem_tra_trung_ma_the () : Thay vì trả về True/ False, thì hãy trả về con trỏ. Con trỏ này == Null tức là tìm không ra , con trỏ này !=Null tức là đã tìm ra, và nó chính là vị trí phần tử.
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Um Mani Padme Hum...!!

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn