Algorithm – Cập nhật thuật toán vẽ cây nhị phân

Bản cài đặt vẽ cây nhị phân trước đây (xem tại đây) tôi đã giới thiệu sử dụng phép chia dư để tính khoảng cách giữa các node theo chiều ngang. Vì thế xác suất các node nằm đè lên nhau rất lớn, đặc biệt khi cây có nhiều node thì mức độ tập trung node của cây tại một vùng khiến cho các node chỉ nhìn được một phần nhỏ. Trong phiên bản lần này tôi sử dụng cách tính khoảng cách này dựa vào giá trị độ lớn giữa hai node liền nhau (node cha và con), điều này đảm bảo các node được trải đều trên một đoạn thẳng ngang xác định, dựa vào số lượng node của cây.

BSTreeGui1.1

Y2 BSTree 1.1

Các cập nhật mới phiên bản 1.1: – Thay đổi một vài thông số kích thước. – Thay đổi thuật toán vẽ cây. – Bổ sung thêm menu giúp điều chỉnh kích thước khung nhìn.

Download sourcecode (97KB)

https://yinyangit.wordpress.com

Advertisements

17 thoughts on “Algorithm – Cập nhật thuật toán vẽ cây nhị phân

  1. Thuật toán này mình hiện thực từ hồi học C++ và vẽ trên Console. Giả sử cây của bạn chỉ có 3 node (1 cha và 2 con) như vậy việc vẽ chỉ đơn giản là:
    -Vẽ node cha ở vị trí (left, top)
    -Vẽ node con trái ở vị trí (left-A,top+B)
    -Vẽ node con phải ở vị trí (left+A,top+B)

    Và cứ thế bạn gọi đệ quy cho từng node như việc duyệt cây nhị phân theo thứ tự node-left-right.

    Phản hồi
    • Tất nhiên là mình sẵn sàng giúp trong điều kiện cho phép. Nếu muốn vẽ bằng GDI+ trước tiên bạn hãy tìm đọc một vài tài liệu về nó. THực sự cũng ko quá phức tạp bởi vì nó đã cung cấp sẵn các phương thức vẽ căn bản rồi.

      Phản hồi
  2. Mình thấy chương trình vẽ cây của bạn rất hay rất hữu ích cho những ai học cấu trúc dữ liệu.
    Mình đang thực hiện bài báo cáo về B-tree vào thứ 5 này. Bạn có thể share cho mình một số chương trình hay ví dụ demo B-Tree được không vậy. Như vậy thì cảm ơn rất nhiều.

    Phản hồi
  3. Chào bạn, bạn có thể demo vẽ trên web asp.net được ko?
    Mình có 1 list các node, sắp xếp lộn xộn, ko theo trật tự
    các node có đầy đủ thông tin node cha, vị trí trái phải.

    Mình đang khổ sở không biết làm thế nào.
    Hi vọng được bạn giúp đỡ.

    Phản hồi

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s