Tôi có câu hỏi lý thuyết về Balanced BST
.Cây tìm kiếm nhị phân cân bằng hoàn hảo
Tôi muốn xây dựng Perfect Balanced Tree
có các nút 2^k - 1
, từ thông thường unbalanced BST
. Giải pháp đơn giản nhất tôi có thể nghĩ là sử dụng một số được sắp xếp Array/Linked list
và đệ quy chia mảng thành mảng phụ và xây dựng Perfect Balanced BST
từ nó.
Tuy nhiên, trong trường hợp kích thước cây cực lớn, tôi sẽ cần phải tạo một Array/List
có cùng kích thước để phương pháp này sẽ tiêu tốn một lượng bộ nhớ lớn.
Một tùy chọn khác là sử dụng chức năng xoay AVL
, chèn phần tử theo phần tử và cân bằng cây với phép xoay tùy thuộc vào Hệ số cân bằng cây - ba chiều cao của cây con trái và phải.
Câu hỏi của tôi là, tôi có đúng về các giả định của tôi không? Có cách nào khác để tạo ra một hoàn hảo BST
từ không cân bằng BST
?
Một số chức năng xoay có ý nghĩa hoàn hảo trong trường hợp bạn có cây lớn và muốn biến đổi cây mà không thay đổi nhiều cấu trúc hiện có. - Kết quả có thực sự phải được cân bằng hoàn hảo không? Nền tảng của câu hỏi là gì? – michas
Có, nó phải được cân bằng hoàn hảo. Nó là một phần của một dự án hàn lâm. Bạn có ý nghĩa gì bởi "một số chức năng xoay vòng"? Theo tôi biết có bốn chức năng xoay khá dễ thực hiện. – OlejkaKL
Các loại cây khác nhau sử dụng các cách xoay khác nhau một chút. Ví dụ như so sánh cây AVL và cây đỏ đen. – michas