2010-03-18 73 views
7

Tôi muốn thực hiện các phím trùng lặp hỗ trợ avl-tree nhưng có vấn đề với hành vi mặc định của binary search tree với các bản sao có thể làm cho các nút có khóa bằng nhau ở bên trái và bên phải cha mẹ.Xử lý các khóa trùng lặp trong một cây AVL

Ví dụ khi thêm ba nút tất cả với phím A sẽ gây ra cây để làm một vòng quay là một cái gì đó như thế này:

A 
/\ 
A A 

Vì vậy, nhận được tất cả các mục với phím đó sẽ là một vấn đề ... và tìm kiếm theo cả hai hướng là không tốt. Các giải pháp mà tôi đã nghĩ là làm cho mỗi cửa hàng lưu trữ một mảng các bản sao vì vậy khi thêm một mục mới đã tồn tại sẽ chỉ cần thêm một mục mới vào mảng, loại bỏ mục có khóa sẽ xóa toàn bộ trong khi tìm tất cả các mục có khóa sẽ trả về mảng đó.

Có bất kỳ phương pháp khác để xử lý các bản sao?

Mục chèn có một khóa và giá trị .. vì vậy tôi cần phải lưu trữ các giá trị inorder để trả về chúng bằng findAll với phương thức khóa nhất định.

Trả lời

3

Một cách tiếp cận chung khác là làm cho phần giá trị của khóa trong nội bộ trở nên không thực sự có khóa trùng lặp nữa. Bạn sẽ cần cả khóa và giá trị để xóa mục nhập khỏi cây cho phép trùng lặp.

Để tìm kiếm một chìa khóa mà không biết giá trị, sau đó bạn sẽ làm điều gì đó tương tự (pseudo-code):

searchResult = myTree.SearchGreaterOrEqual(Key); 
found = (searchResult != null) && (searchResult.Key == Key); 
+0

cách tiếp cận tốt đẹp :) thực sự chúng tôi bắt buộc phải xóa phương thức xóa tất cả các mục bằng khóa đó ... –

2

Có mỗi nút chứa số lượng: việc cộng các bản sao sẽ tăng số lượng, việc xóa sẽ giảm số lượng trừ khi đó là 1, trong trường hợp đó toàn bộ nút sẽ bị xóa.

+0

tôi quên nói rằng cây có một chìa khóa và một giá trị vì vậy tôi phải lưu trữ các giá trị trả lại chúng trong phương thức tìm kiếm ... –

+1

Để làm rõ, sẽ có các giá trị khác nhau (không phải giá trị trùng lặp) được lưu trữ cho một khóa không? Nếu vậy, giải pháp mảng giá trị của bạn có vẻ tốt với tôi. – jball

+1

Giải pháp tốt. (Văn bản bổ sung cho độ dài bài đăng tối thiểu ngu ngốc). –

Các vấn đề liên quan