Cây hợp nhất là một cấu trúc dữ liệu dạng cây thực hiện một mảng kết hợp trên các số nguyên w-bit. Đây là một chương trình C ++ để triển khai cây hợp nhất. Chương trình này đã tạo ra một mảng các số nguyên 6 bit trên cây nhị phân nhất định làm đầu vào.
Thuật toán
Các chức năng và đầu vào bắt buộc -
Begin Lấy không có phần tử của cây và lấy các phần tử. Tạo cấu trúc FusionTree để khai báo biến. Tạo một hàm init () để tạo các nút. Tạo một hàm traverse () để đi qua cây. Tạo một hàm sort () để sắp xếp các nút của cây. Tạo một hàm split_child () để tách các nút. Tạo một hàm insert () để chèn các nút vào cây. Tạo một hàm main (), gọi insert () để tạo cây hợp nhất và sau đó gọi hàm traverse để hiển thị kết quả.Mã mẫu
#includeusing namespace std; struct FusionTree // khai báo các nút {int * d; FusionTree ** child_ptr; bool l; int n;} * r =NULL, * np =NULL, * x =NULL; FusionTree * init () // cretae new node {int i; np =new FusionTree; np-> d =new int [6]; np-> child_ptr =new FusionTree * [7]; np-> l =true; np-> n =0; for (i =0; i <7; i ++) {np-> con_ptr [i] =NULL; } return np;} void traverse (FusionTree * p) // duyệt cây {cout < n; i ++) {if (p-> l ==false) {traverse (p-> child_ptr [i]); } cout <<"" < d [i]; } if (p-> l ==false) {traverse (p-> child_ptr [i]); } cout < p [j]) {t =p [i]; p [i] =p [j]; p [j] =t; }}}} int split_child (FusionTree * x, int i) // chia con {int j, mid; FusionTree * np1, * np3, * y; np3 =init (); // khởi tạo nút mới np3-> l =true; if (i ==-1) {mid =x-> d [2]; // tính mid x-> d [2] =0; x-> n--; np1 =init (); np1-> l =false; x-> l =true; for (j =3; j <6; j ++) {np3-> d [j - 3] =x-> d [j]; np3-> con_ptr [j - 3] =x-> con_ptr [j]; np3-> n ++; x-> d [j] =0; x-> n--; } for (j =0; j <6; j ++) {x-> con_ptr [j] =NULL; } np1-> d [0] =mid; np1-> con_ptr [np1-> n] =x; np1-> con_ptr [np1-> n + 1] =np3; np1-> n ++; r =np1; } else {y =x-> con_ptr [i]; mid =y-> d [2]; y-> d [2] =0; y-> n--; for (j =3; j <6; j ++) {np3-> d [j - 3] =y-> d [j]; np3-> n ++; y-> d [j] =0; y-> n--; } x-> con_ptr [i + 1] =y; x-> con_ptr [i + 1] =np3; } return mid;} void insert (int a) {int i, t; x =r; if (x ==NULL) {r =init (); x =r; } else {if (x-> l ==true &&x-> n ==6) {t =split_child (x, -1); x =r; for (i =0; i <(x-> n); i ++) {if ((a> x-> d [i]) &&(a d [i + 1])) {i ++; phá vỡ; } else if (a d [0]) {break; } else {tiếp tục; }} x =x-> con_ptr [i]; } else {while (x-> l ==false) {for (i =0; i <(x-> n); i ++) {if ((a> x-> d [i]) &&(a d [i + 1])) {i ++; phá vỡ; } else if (a d [0]) {break; } else {tiếp tục; }} if ((x-> con_ptr [i]) -> n ==6) {t =split_child (x, i); x-> d [x-> n] =t; x-> n ++; tiếp tục; } else {x =x-> con_ptr [i]; }}}} x-> d [x-> n] =a; sort (x-> d, x-> n); x-> n ++;} int main () {int i, n, t; cout <<"nhập số phần tử sẽ được chèn \ n"; cin>> n; for (i =0; i > t; chèn (t); } cout <<"duyệt qua cây hợp nhất đã xây dựng \ n"; traverse (r);} Đầu ra
nhập không có phần tử nào sẽ được chèn7 nhập phần tử10 nhập phần tử vào phần tử20 nhập phần tử30 nhập phần tử40 nhập phần tử vào phần tử50 nhập phần tử60 nhập phần tử70 chuyển giao của cây hợp nhất đã xây dựng10 203040 50 60 70