Đầu tiên, tôi sẽ cho rằng tất cả các yếu tố là khác biệt. Không có số lượng tuần tự sẽ cho bạn biết hình dạng của cây với các yếu tố [3,3,3,3,3]
. Tất nhiên, có thể xây dựng lại một số cây với các yếu tố trùng lặp; Tôi không biết những điều kiện đủ đẹp tồn tại.
Tiếp tục với các kết quả tiêu cực, bạn không thể xây dựng lại hoàn toàn một cây nhị phân từ các chuỗi tuần tự trước và sau đơn đặt hàng của nó. [1,2]
đặt hàng trước, đặt hàng [2,1]
sau phải có 1
ở gốc, nhưng 2
có thể là con trái hoặc con phải. Nếu bạn không quan tâm đến sự mơ hồ này, bạn có thể xây dựng lại cây bằng thuật toán sau:
- Đặt là giao dịch đặt hàng trước và là giao dịch theo thứ tự sau. Chúng ta phải có và đây là gốc của cây.[ y n , ... , y 1 ] x 1 = y 1[ x1, Lọ , xn][ yn, ... , y1]x1= y1
- y 2 x 2 = y 2 [ x 2 , ... , x n ] [ y n , ... , y 2 ]x2 là con ngoài cùng bên trái của gốc và là con ngoài cùng bên phải. Nếu , nút gốc là đơn nguyên; lặp lại và để tạo một cây con duy nhất.y2x2= y2[ x2, Lọ , xn][ yn, ... , y2]
- khác, hãy để và là các chỉ số sao cho và . là giao dịch đặt hàng trước của cây con bên trái, của cây con bên phải và tương tự cho các giao dịch theo thứ tự sau. Cây con bên trái có các phần tử và cây con bên phải có phần tử. Recurse một lần cho mỗi cây con.
Nhân tiện, phương pháp này khái quát cho cây với sự phân nhánh tùy ý. Với sự phân nhánh tùy ý, tìm ra phạm vi của cây con bên trái và cắt các phần tử của nó khỏi cả hai danh sách, sau đó lặp lại để cắt bỏ cây con thứ hai từ bên trái, v.v.tôix 2 = y i y 2 = x j [ x 2 , ... , x j - 1 ] [ x j , ... , x n ] j - 2 = n - i + 1 i - 2 = n - j + 1 j - 2jx2= ytôiy2= xj[ x2, Lọ , xj - 1][ xj, Lọ , xn]j - 2 = n - i + 1i - 2 = n - j + 1
j - 2
Như đã nêu, thời gian chạy là với trường hợp xấu nhất (trong trường hợp có hai con, chúng tôi tìm kiếm từng danh sách lót). Bạn có thể biến nó thành nếu bạn xử lý trước các danh sách để xây dựng cấu trúc ánh xạ hữu hạn từ các giá trị phần tử đến các vị trí trong danh sách đầu vào . Cũng sử dụng một mảng hoặc bản đồ hữu hạn để đi từ các chỉ số đến các giá trị; bám sát các chỉ số toàn cầu, để các cuộc gọi đệ quy sẽ nhận được toàn bộ bản đồ và lấy một phạm vi làm đối số để biết phải hành động.Θ ( n 2 ) O ( nÔ ( n2)Θ ( n2)Ô ( nl g ( n ) )nl g (n)
Với giao dịch đặt hàng trước và truyền tải theo thứ tự , bạn có thể xây dựng lại cây như sau:[ x1, Lọ , xn][ z1, ... , zn]
- Rễ là phần đầu của giao dịch đặt hàng trước .x1
- Đặt là chỉ số sao cho . Thì là truyền tải theo thứ tự của trẻ trái và là giao dịch theo thứ tự của trẻ phải. Theo số lượng phần tử, là giao dịch đặt hàng trước của con trái và của con phải. Recurse để xây dựng các cây con trái và phải.kzk= x1[ z1, ... , zk - 1][ zk + 1, ... , zn][ x2, Lọ , xk][ xk + 1, Lọ , xn]
Một lần nữa, thuật toán này là như đã nêu và có thể được thực hiện trong nếu danh sách được xử lý trước thành bản đồ hữu hạn từ các giá trị đến các vị trí.Ô ( n2)Ô ( nl g ( n ) )
Tất nhiên sau khi đặt hàng cộng với theo thứ tự là tất nhiên đối xứng.