Computer >> Máy Tính >  >> Lập trình >> C ++

2-3 Cây - Cấu trúc dữ liệu và thuật toán trong C ++

Cây 2-3 là một loại cây trong cấu trúc dữ liệu, trong đó mọi nút của cây đều là 2 nút

hoặc 3 nút. Đây là một loại B-Tree đặc biệt với đơn đặt hàng 3.

2 nút trong cây là một nút có một phần dữ liệu và hai nút con.

Nút 3 trong cây là một nút có hai phần dữ liệu và ba nút con.

2-3 Cây - Cấu trúc dữ liệu và thuật toán trong C ++

Hình:- Một cây 2-3

Thuộc tính của cây 2-3:-

  • Mọi nút bên trong đều là nút 2 hoặc nút 3.

  • Một nút chứa một phần dữ liệu có thể là một nút 2 với chính xác 2 nút con hoặc một nút lá không có con nào.

  • Một nút chứa hai phần dữ liệu chỉ có thể là một nút 3 với đúng 3 phần tử con.

  • Tất cả các nút lá luôn ở cùng một mức.

  • Cây 2-3 luôn là cây cân đối về chiều cao.

  • Hoạt động tìm kiếm nhanh chóng và hiệu quả trong 2-3 cây.

2 Nút:-

  • Chính xác là hai đứa trẻ.

  • Còn lại con có trọng lượng nhỏ hơn.

  • Đúng trẻ có cân nặng lớn hơn.

  • Có thể là một nút lá không có nút con.

2-3 Cây - Cấu trúc dữ liệu và thuật toán trong C ++

3 Nút:-

  • Chính xác là ba đứa trẻ.

  • 2 giá trị dữ liệu.

  • Con bên trái có trọng lượng nhỏ hơn giá trị dữ liệu bên trái.

  • Con giữa có trọng số ở giữa cả hai giá trị dữ liệu.

  • Con bên phải có trọng số lớn hơn giá trị dữ liệu bên phải.

  • Không bao giờ có thể là một nút lá.

2-3 Cây - Cấu trúc dữ liệu và thuật toán trong C ++

Các hoạt động trong 2-3 cây:-

1. Tìm kiếm trong 2-3 cây

  • Tương tự như thao tác tìm kiếm trong cây tìm kiếm nhị phân khi dữ liệu được sắp xếp.

  • Để tìm kiếm X trong 2-3 cây.

  • Nếu cây trống → trả về False

  • Nếu chúng ta đến nút gốc thì trả về False (không tìm thấy)

  • Nếu X nhỏ hơn phần dữ liệu bên trái, thì hãy tìm kiếm cây con bên trái

  • Nếu X lớn hơn dữ liệu bên trái và nhiều hơn dữ liệu bên phải, hãy tìm kiếm cây con ở giữa.

  • Nếu X lớn hơn phần dữ liệu bên phải, thì hãy tìm kiếm cây con bên phải.

2-3 Cây - Cấu trúc dữ liệu và thuật toán trong C ++

2. Chèn một nút trong cây 2-3

  • Để chèn X vào một cây 2-3.

  • Nếu cây trống → Thêm X làm gốc.

  • Tìm kiếm đúng vị trí của X và thêm nó làm nút lá.

  • Nếu có một nút lá với một phần dữ liệu, hãy thêm X với và nút lá trở thành 2 - Nút.

  • Nếu nút lá có hai phần dữ liệu, hãy thêm X. Tách 3 nút tạm thời và di chuyển dữ liệu đến các nút mẹ theo thứ tự sắp xếp.

Tạo 2-3 cây và thêm các nút theo thứ tự → 10, 5, 8, 15, 23, 21

2-3 Cây - Cấu trúc dữ liệu và thuật toán trong C ++

3. Xóa một nút trong cây 2-3

  • Để xóa X trong một cây 2-3.

  • Nếu cây trống, trả về false.

  • Tìm kiếm vị trí của X và xóa nó, sau đó điều chỉnh cây.

  • Nếu X là một phần của 3 nút xóa X và điều chỉnh giá trị bên trái và giá trị giữa. Đồng thời điều chỉnh giá trị bên trái và giá trị giữa của tổ tiên của nút nếu cần.

  • Nếu X là một phần của 2 nút thì điều chỉnh và tách cây theo cách đệ quy sắp xếp các nút theo thứ tự đã sắp xếp.