Nên dùng mảng con trỏ hay mảng thường để làm mảng phụ khi muốn đổ dữ liệu từ danh sách liên kết đơn/cây nhị phân?

Chào anh chị, em đang cài đặt danh sách sinh viên bằng cây nhị phân, giờ em muốn đổ dữ liệu sang mảng phụ để xử lý in danh sách ra màn hình, thì em có một thắc mắc, nên dùng mảng phụ là mảng thường hay mảng con trỏ cấp phát vừa tĩnh, vừa động?
Nếu dùng mảng thường thì em phải copy MAX sinh viên, tốn chi phí rất nhiều.
Nếu dùng mảng con trỏ cấp phát kiểu vừa động vừa tĩnh(int * A[MAX]) thì chỉ tạo MAX con trỏ, và cho nó trỏ đến vùng nhớ mà cây nhị phân quản lý. Như vậy, sẽ tiết kiệm bộ nhớ hơn. Mà làm thế, thì có ổn không ạ?
Em cảm ơn.

Sao không vừa duyệt vừa in nhỉ :smiley: Đâu cần mảng mới in được.

Tốt nhất là trỏ vào data :smiley: chứ trỏ vào cấu trúc thì sẽ bị bó vào cấu trúc đó, mà mấy cái node đó không có ý nghĩa gì bên ngoài cái cây cả.

3 Likes

Em muốn in danh sách kiểu phân trang, mỗi lần chỉ tầm 10 phần tử nên cần chỉ số của mảng tuyến tính ạ. Không biết có cách nào tốt hơn mà tiếp kiệm bộ nhớ hơn không ạ, em định duyệt hết n phần tử, cho biến count vào để đếm, rồi in tầm 10 phần tử ra. Mỗi lần duyệt là duyệt hết n phần tử nhưng chỉ in tầm 10 trong n phần tử đó thôi ạ. Như vậy ổn không anh?

Em cảm ơn nhiều, hay quá.

Một hướng khác là thêm một con trỏ *parent trỏ lên node cha. Trừ node gốc, các parent đều khác nullptr. Như vậy từ 1 node bạn có thể đến bao nhiêu node cũng được :smiley: và theo cả hai chiều.

Tất nhiên các thao tác cân bằng sẽ phải thêm một bước.

4 Likes

Nếu muốn in phần tử theo biến count thì sao lại phải dùng mảng phụ nhỉ? Cho số phần tử mình muốn in là input , rồi Đi từ gốc vừa duyệt vừa tăng count, đến phần tử mình muốn in thì từ đó in trực tiếp ra.

1 Like

Để theo hướng này mình cần tìm hiểu về cây nhị phân tìm kiếm cân bằng anh nhỉ? Do em thì chỉ biết mỗi cây nhị phân tìm kiếm thôi nên chưa rõ cách này ạ.

Em chưa rõ ý anh lắm. Ví dụ mình cần in 10 phần tử đầu thì mình duyệt cây, tăng count rồi gặp biến cần in thì in ra ạ?

À… cái này không liên quan đến việc cân bằng :smiley: Cân bằng là để ngăn chặn việc cây con suy biến thành DSLK (một dây dài), còn thêm con trỏ node cha vào là để duyệt cây từ một nút đã cho và duyệt theo cả hai chiều.

Làm theo bạn này thì phải duyệt cho tới nút đó luôn chứ không phải đi tìm là được.

3 Likes

Sorry, anh cho em xin demo hoặc tài liệu liên quan(nếu có thể) được không, chứ em chưa hình dung ra nữa.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?