二叉平衡树(AVL)的插入、调整与顺序输出

#include 
#include 
#include 
using namespace std;
typedef struct AvlNode
{
    int data, height;
    struct AvlNode *lchild, *rchild;
}AvlNode, *AvlTree;
int GetHeight( AvlTree T )
{    return T ? T->height : 0;  }
void UpdateHeight( AvlTree &T )
{    T->height = max( GetHeight( T->lchild ), GetHeight( T->rchild ) ) + 1;     }
int GetFactor( AvlTree T )
{    return GetHeight( T->lchild ) - GetHeight( T->rchild );    }
void LRotation( AvlTree &T )
{
    AvlNode *R = T->rchild;
    T->rchild = R->lchild;
    R->lchild = T;
    UpdateHeight( T );
    UpdateHeight( R );
    T = R;
}
void RRotation( AvlTree &T )
{
    AvlNode *R = T->lchild;
    T->lchild = R->rchild;
    R->rchild = T;
    UpdateHeight( T );
    UpdateHeight( R );
    T = R;
}
void Insert( AvlTree &T, int k )
{
    if( !T )
    {
        T = ( AvlTree ) malloc( sizeof( AvlNode ) );
        T->data = k;
        T->height = 1;
        T->lchild = T->rchild = NULL;
    }
    else if( T->data < k )
    {
        Insert( T->rchild, k );
        UpdateHeight( T );
        if( GetFactor( T ) == -2 )
        {
            if( GetFactor( T->rchild ) == 1 )
                RRotation( T->rchild );
            LRotation( T );
        }
    }
    else if( T->data > k )
    {
        Insert( T->lchild, k );
        UpdateHeight( T );
        if( GetFactor( T ) == 2 )
        {
            if( GetFactor( T->lchild ) == -1 )
                LRotation( T->lchild );
            RRotation( T );
        }
    }
}
void Inorder( AvlTree T )
{
    if( T )
    {
        Inorder( T->lchild );
        printf("%d ", T->data);
        Inorder( T->rchild );
    }
}
int main()
{
    int N, k;
    AvlTree T = NULL;
    scanf("%d", &N);
    for( int i = 0; i < N; ++i )
    {
        scanf("%d", &k);
        Insert( T, k );
    }
    Inorder( T );
}

输入:

1000
1977 2923 64 986 4894 4959 3292 1897 3681 765
2742 2423 3892 1479 3397 1953 1022 2839 101 3538
1637 4413 3157 3405 1130 3091 4316 2639 44 2628
1068 4552 519 4680 2629 733 2228 3263 110 2619
2834 3632 3494 1007 1944 1801 934 2625 3809 3112
2855 3790 1475 4871 2431 2249 2207 2502 3479 3038
4935 2317 3113 2837 4688 912 1144 2251 2095 2675
4867 744 2167 1686 3205 4813 3701 2906 289 1537
2885 1341 4689 1902 4146 2057 4635 192 2995 3984
2811 1030 1028 2479 284 3340 4018 1719 742 1094
3258 1147 4656 4373 2142 2258 3598 4626 3276 3550
3909 1784 586 4758 4865 3799 3877 3725 228 2847
373 2855 4546 344 332 287 1491 1335 882 939
2580 2509 929 3989 22 1105 3293 3657 2940 2117
2805 2608 1115 816 3798 4329 3671 1287 4109 2218
1033 1373 3530 3173 1939 1637 3544 795 2524 405
2726 1669 1075 908 1777 3345 107 661 1745 2926
4479 1930 4832 1312 3643 586 3283 4761 4656 1386
4733 3288 2322 4716 531 494 2034 2495 1097 1415
3293 4679 4824 746 3908 396 3919 286 4745 21
1461 4135 3529 2353 2156 492 3386 164 4355 2258
2916 806 379 2280 198 3417 1756 4114 2375 2431
4878 4679 2157 1596 3049 984 3067 4766 2973 4958
644 1715 4760 4567 3147 4127 2990 4904 1884 3121
682 4528 1287 2138 1609 1898 4223 277 415 2065
2052 3411 3226 3755 3837 4146 1628 4458 3281 1977
2726 382 1925 4867 3506 242 173 2157 3562 2851
2037 1860 1530 4730 4674 950 3719 3248 3070 2458
315 1121 3417 1045 1455 892 454 3622 1579 4217
3061 4157 1702 2465 1823 861 2922 1447 233 1041
3273 3805 2955 1571 711 805 2959 4216 697 1511
3345 3857 3097 2312 2085 633 812 4501 4301 2394
557 2053 2470 885 2114 3946 2027 2680 1066 2200
4454 2306 3497 4069 105 3515 918 4437 2572 1356
745 269 250 2728 3231 4889 2980 2688 2801 2062
2307 615 3006 4016 1544 909 915 967 582 3328
4351 2500 2748 1643 2060 590 1363 4500 4393 522
3206 3204 1281 4942 200 113 786 2359 1001 3606
2093 1703 527 1227 4489 4895 4631 2663 3747 4269
179 1359 975 3845 1572 1674 1006 436 2005 2406
1733 3219 1098 278 1695 4349 443 2601 3142 1970
358 2232 3101 1668 2942 1524 2877 3216 2098 3752
467 4708 1957 4682 3020 1993 4605 234 2113 2504
4192 2376 4131 423 2990 26 2311 4146 4442 611
1556 2470 3524 2107 3925 2559 934 1065 4923 3486
2057 1469 2385 1021 130 2945 2636 918 348 3801
2566 4100 3009 3908 90 3771 4406 4589 948 632
1491 1830 4073 3583 3993 3171 4642 96 2772 481
1403 4468 4686 2274 548 1546 2887 2391 4809 1096
52 3545 4811 2122 2665 3764 1470 4157 1370 270
3595 4701 4341 534 2618 3771 3522 2820 1781 119
4125 3187 4738 1428 2903 2319 2456 2495 4249 4811
2356 4499 3746 2561 4984 3589 293 4776 203 3454
4218 2543 3740 125 2095 1027 3665 3518 2655 4854
1087 1349 2546 4194 1893 2846 3412 2444 3776 2441
3929 2542 3692 1838 2484 3639 674 3400 2151 846
3816 4511 1023 2094 3561 800 1789 3684 2042 1526
719 3286 2518 1579 3515 3014 3195 1463 3941 4897
958 597 758 3996 2301 326 583 3732 4210 3812
1894 905 2666 2200 4166 1014 4451 2975 99 4425
3177 2994 4784 772 2485 2529 1632 3514 4037 1520
3241 4374 3100 776 1498 2605 2787 389 3908 1723
3847 2200 3350 2712 2711 2372 3769 3325 2016 3021
2822 242 2565 1860 1223 185 1611 4992 2186 4586
410 2714 1086 1979 4557 1905 4789 3399 1541 2240
3824 1187 2577 3297 2225 4052 4454 4611 1498 495
1078 186 4204 3156 775 801 1914 3040 2498 400
1303 3431 3903 2283 514 3507 614 272 1676 3667
3832 1541 478 386 4325 2479 4392 4304 38 5
2284 406 149 3319 2091 4013 4495 4516 2518 1061
3677 4789 4079 3323 3408 161 3350 2203 3535 2805
2326 2296 2241 3220 2287 1229 512 1954 2082 2350
3921 3381 4843 3384 2480 4145 2253 4214 4959 3158
4723 2386 3413 4827 1448 4797 3419 1066 198 2718
2032 3789 356 435 4943 940 4207 3073 1251 4575
978 4188 2866 1060 3390 3403 2770 2271 2346 2940
2282 1140 1234 2596 1428 1784 4512 504 4543 2930
4408 1632 4035 2108 3501 825 2947 4867 3936 2207
3109 549 3120 2556 2519 346 1449 2410 4414 1377
2949 3210 3891 1616 266 3683 4417 4810 2295 4841
4178 183 3634 2452 1686 46 1379 3997 95 1138
720 2371 2386 205 3475 2309 835 2802 2524 997
541 4072 1001 3064 2282 4238 1573 2328 2244 411
2947 1552 3076 998 3794 1139 1341 4488 1537 3787
3586 2397 4830 423 1317 3992 1133 565 1366 3728
2185 2209 3499 4271 4133 2137 1072 4634 938 4903
33 213 4258 1651 345 45 1307 2821 3050 4669
3401 1821 167 2783 4794 1724 1871 4711 346 2753
493 4401 1506 3255 1558 4297 1330 2329 1185 4932
164 4181 3838 1485 4183 504 4647 731 4140 1789
1595 471 3803 3556 2705 174 2930 4752 1947 809
2776 371 4674 2600 2060 1035 4972 1067 2269 4370
4143 3762 4319 3154 1688 2803 321 220 2993 2964
4041 2030 455 1372 1979 2234 1897 3427 2578 3722
4704 2569 1959 2705 1481 2601 252 1619 963 4903
2985 1776 4823 727 1731 1216 3066 1675 2679 22
2994 2630 501 2218 81 2492 4047 2171 2992 656
4819 970 3709 3151 3844 109 798 2420 1943 763
3211 2437 4678 1899 2649 4696 2801 4693 1667 2441
379 1399 4570 2112 4558 192 4616 782 4051 2704

结果输出:

5 21 22 26 33 38 44 45 46 52 64 81 90 95 96 99 101 105 107 109 110 113 119 125 130 149 161 164 167 173 174 179 183 185 186 192 198 200 203 205 213 220 228 233 234 242 250 252 266 269 270 272 277 278 284 286 287 289 293 315 321 326 332 344 345 346 348 356 358 371 373 379 382 386 389 396 400 405 406 410 411 415 423 435 436 443 454 455 467 471 478 481 492 493 494 495 501 504 512 514 519 522 527 531 534 541 548 549 557 565 582 583 586 590 597 611 614 615 632 633 644 656 661 674 682 697 711 719 720 727 731 733 742 744 745 746 758 763 765 772 775 776 782 786 795 798 800 801 805 806 809 812 816 825 835 846 861 882 885 892 905 908 909 912 915 918 929 934 938 939 940 948 950 958 963 967 970 975 978 984 986 997 998 1001 1006 1007 1014 1021 1022 1023 1027 1028 1030 1033 1035 1041 1045 1060 1061 1065 1066 1067 1068 1072 1075 1078 1086 1087 1094 1096 1097 1098 1105 1115 1121 1130 1133 1138 1139 1140 1144 1147 1185 1187 1216 1223 1227 1229 1234 1251 1281 1287 1303 1307 1312 1317 1330 1335 1341 1349 1356 1359 1363 1366 1370 1372 1373 1377 1379 1386 1399 1403 1415 1428 1447 1448 1449 1455 1461 1463 1469 1470 1475 1479 1481 1485 1491 1498 1506 1511 1520 1524 1526 1530 1537 1541 1544 1546 1552 1556 1558 1571 1572 1573 1579 1595 1596 1609 1611 1616 1619 1628 1632 1637 1643 1651 1667 1668 1669 1674 1675 1676 1686 1688 1695 1702 1703 1715 1719 1723 1724 1731 1733 1745 1756 1776 1777 1781 1784 1789 1801 1821 1823 1830 1838 1860 1871 1884 1893 1894 1897 1898 1899 1902 1905 1914 1925 1930 1939 1943 1944 1947 1953 1954 1957 1959 1970 1977 1979 1993 2005 2016 2027 2030 2032 2034 2037 2042 2052 2053 2057 2060 2062 2065 2082 2085 2091 2093 2094 2095 2098 2107 2108 2112 2113 2114 2117 2122 2137 2138 2142 2151 2156 2157 2167 2171 2185 2186 2200 2203 2207 2209 2218 2225 2228 2232 2234 2240 2241 2244 2249 2251 2253 2258 2269 2271 2274 2280 2282 2283 2284 2287 2295 2296 2301 2306 2307 2309 2311 2312 2317 2319 2322 2326 2328 2329 2346 2350 2353 2356 2359 2371 2372 2375 2376 2385 2386 2391 2394 2397 2406 2410 2420 2423 2431 2437 2441 2444 2452 2456 2458 2465 2470 2479 2480 2484 2485 2492 2495 2498 2500 2502 2504 2509 2518 2519 2524 2529 2542 2543 2546 2556 2559 2561 2565 2566 2569 2572 2577 2578 2580 2596 2600 2601 2605 2608 2618 2619 2625 2628 2629 2630 2636 2639 2649 2655 2663 2665 2666 2675 2679 2680 2688 2704 2705 2711 2712 2714 2718 2726 2728 2742 2748 2753 2770 2772 2776 2783 2787 2801 2802 2803 2805 2811 2820 2821 2822 2834 2837 2839 2846 2847 2851 2855 2866 2877 2885 2887 2903 2906 2916 2922 2923 2926 2930 2940 2942 2945 2947 2949 2955 2959 2964 2973 2975 2980 2985 2990 2992 2993 2994 2995 3006 3009 3014 3020 3021 3038 3040 3049 3050 3061 3064 3066 3067 3070 3073 3076 3091 3097 3100 3101 3109 3112 3113 3120 3121 3142 3147 3151 3154 3156 3157 3158 3171 3173 3177 3187 3195 3204 3205 3206 3210 3211 3216 3219 3220 3226 3231 3241 3248 3255 3258 3263 3273 3276 3281 3283 3286 3288 3292 3293 3297 3319 3323 3325 3328 3340 3345 3350 3381 3384 3386 3390 3397 3399 3400 3401 3403 3405 3408 3411 3412 3413 3417 3419 3427 3431 3454 3475 3479 3486 3494 3497 3499 3501 3506 3507 3514 3515 3518 3522 3524 3529 3530 3535 3538 3544 3545 3550 3556 3561 3562 3583 3586 3589 3595 3598 3606 3622 3632 3634 3639 3643 3657 3665 3667 3671 3677 3681 3683 3684 3692 3701 3709 3719 3722 3725 3728 3732 3740 3746 3747 3752 3755 3762 3764 3769 3771 3776 3787 3789 3790 3794 3798 3799 3801 3803 3805 3809 3812 3816 3824 3832 3837 3838 3844 3845 3847 3857 3877 3891 3892 3903 3908 3909 3919 3921 3925 3929 3936 3941 3946 3984 3989 3992 3993 3996 3997 4013 4016 4018 4035 4037 4041 4047 4051 4052 4069 4072 4073 4079 4100 4109 4114 4125 4127 4131 4133 4135 4140 4143 4145 4146 4157 4166 4178 4181 4183 4188 4192 4194 4204 4207 4210 4214 4216 4217 4218 4223 4238 4249 4258 4269 4271 4297 4301 4304 4316 4319 4325 4329 4341 4349 4351 4355 4370 4373 4374 4392 4393 4401 4406 4408 4413 4414 4417 4425 4437 4442 4451 4454 4458 4468 4479 4488 4489 4495 4499 4500 4501 4511 4512 4516 4528 4543 4546 4552 4557 4558 4567 4570 4575 4586 4589 4605 4611 4616 4626 4631 4634 4635 4642 4647 4656 4669 4674 4678 4679 4680 4682 4686 4688 4689 4693 4696 4701 4704 4708 4711 4716 4723 4730 4733 4738 4745 4752 4758 4760 4761 4766 4776 4784 4789 4794 4797 4809 4810 4811 4813 4819 4823 4824 4827 4830 4832 4841 4843 4854 4865 4867 4871 4878 4889 4894 4895 4897 4903 4904 4923 4932 4935 4942 4943 4958 4959 4972 4984 4992

你可能感兴趣的:(数据结构)