Thiết kế giải thuật

Một phần của tài liệu cấu trúc dữ liệu chuong 9 (Trang 30 - 31)

Khi nhận phần tử thứ nhất có nhãn là 1, chúng ta sẽ tạo một nút lá có các con trỏ left và right đều là NULL. Nút số 2 nằm trên nút 1, như hình 9.13. Do nút 2 nắm giữ nút 1, bằng cách nào đó chúng ta cần nhớ địa chỉ nút 1 cho đến khi có nút 2. Nút số 3 lại là nút lá, nhưng nó là nút con phải của nút 2, vậy chúng ta cần nhớ lại địa chỉ nút 2

Làm như vậy liệu chúng ta có cần phải nắm giữ một danh sách các con trỏ đến tất cả các nút đã được đưa vào cây, để sau đó chúng mới được gắn vào con trỏ

left hoặc right của cha chúng khi cha chúng xuất hiện sau hay không? Câu trả lời là không. Do khi nút 2 được thêm vào, mọi mối nối với nút 1 đã hoàn tất. Nút 2 cần được nhớ cho đến khi nút 4 được thêm vào, để tạo liên kết trái của nút 4. Tương tự, nút 4 cần được nhớ cho đến khi nút 8 được thêm vào. Trong hình 9.13, các mũi tên chỉ các nút cần được nhớ lại khi cây đang lớn lên.

Chúng ta thấy rằng để thực hiện các mối nối sau đó, đối với mỗi mức chúng ta chỉ cần nhớ lại duy nhất một con trỏ chỉ đến một nút, đó chính là nút cuối cùng trong mức đó. Chúng ta nắm giữ các con trỏ này trong một danh sách gọi là

last_node, và danh sách này cũng sẽ rất nhỏ. Lấy ví dụ, một cây có 20 mức có thể chứa đến 220-1 > 1,000,000 nút, nhưng chỉ cần 20 phần tử trong last_node.

Khi một nút được thêm vào, chúng ta có thể gán con trỏ right của nó là NULL, có thể chỉ là tạm thời, vì nút con phải của nó (nếu có) sẽ được thêm vào sau. Con trỏ trái của một nút mới sẽ là NULL nếu đó là nút lá. Ngược lại, nút con trái của nó chính là nút ở ngay mức thấp hơn mức của nó mà địa chỉ đang chứa trong last_node. Chúng ta cũng có thể xử lý cho các nút lá tương tự như các nút khác bằng cách, nếu cho mức của nút lá là 1, thì chúng ta sẽ cho phần tử đầu tiên, tại vị trí 0, của last_node luôn mang trị NULL. Các mức bên trên mức của nút lá sẽ là 2, 3, ...

Một phần của tài liệu cấu trúc dữ liệu chuong 9 (Trang 30 - 31)