tôi đã tự hỏi nếu có một thuật toán phù hợp để duy trì sự cân bằng của một cây nhị phân, khi nó được biết rằng yếu tố này là luôn chèn theo thứ tự.Giữ một cây nhị phân cân bằng khi yếu tố này được chèn vào để
Một tùy chọn cho việc này là sử dụng phương pháp chuẩn để tạo cây cân bằng từ mảng được sắp xếp hoặc danh sách được liên kết, như được thảo luận trong câu hỏi this và cũng là this câu hỏi khác. Tuy nhiên, tôi muốn một phương thức mà một vài phần tử có thể được chèn vào cây, tra cứu sau đó thực hiện trên nó, và các phần tử khác sau đó được thêm vào sau, mà không cần phải phân hủy cây thành danh sách và tạo lại toàn bộ.
Một tùy chọn khác sẽ là sử dụng một trong nhiều triển khai tự cân bằng cây, AVL, AA, Đỏ-Đen, v.v. Tuy nhiên, tất cả những điều này áp đặt một số chi phí trong quá trình chèn, và tôi đã tự hỏi nếu có thể có một cách để tránh điều này cho ràng buộc các yếu tố là luôn luôn chèn vào theo thứ tự tăng dần. Vì vậy, để rõ ràng, tôi muốn biết nếu có một phương pháp mà tôi có thể duy trì một cây nhị phân cân bằng, để tôi có thể chèn một phần tử mới tùy ý vào nó bất kỳ lúc nào và giữ thăng bằng của cây, cung cấp rằng phần tử mới lớn hơn trong thứ tự của cây hơn tất cả các yếu tố đã có trong cây.
Như một ví dụ, giả sử tôi có cây sau:
4
/\
/ \
2 6
/\ /\
1 3 5 7
Có một cách đơn giản để duy trì cân bằng khi chèn một yếu tố mới, nếu tôi biết rằng nguyên tố này sẽ lớn hơn 7?
Bài tập về nhà phải không? câu hỏi lý thuyết? Nếu nó là để sử dụng thực tế, tôi đã có thể sử dụng một [bỏ qua danh sách] (http://en.wikipedia.org/wiki/Skip_list) thay vì một BST với những điều kiện này, và bổ sung luôn luôn là yếu tố cuối cùng. Nếu điều đó giúp, mặc dù nó không phải là một cái cây, hãy cho tôi biết và tôi sẽ viết nó như một câu trả lời. – amit
@amit, đó cũng là lần đầu tiên tôi đoán. – phimuemue
@amit, nó không phải là một câu hỏi bài tập về nhà, chủ yếu là do tò mò/lý thuyết. Như vậy mặc dù bạn nói đúng rằng các cấu trúc dữ liệu khác như danh sách bỏ qua (hoặc thậm chí cả cây ngón tay) có thể rất phù hợp, tôi quan tâm nhiều hơn đến cách thực hiện điều này với BST. – DarkOtter