Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Giải Thuật Xóa nút trong cây AVL

  1. #1
    Ngày gia nhập
    05 2008
    Bài viết
    1

    Mặc định Giải Thuật Xóa nút trong cây AVL

    Giúp mình với,minh chưa bít thao tác xóa nút trong cây AVL.Các khả năng mất cân bằng khi xóa nút nữa!

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    483

    Trích dẫn Nguyên bản được gửi bởi leotran5287 Xem bài viết
    Giúp mình với,minh chưa bít thao tác xóa nút trong cây AVL.Các khả năng mất cân bằng khi xóa nút nữa!
    Bạn post code cấu trúc dữ liệu, tìm kiếm, các phép quay, hàm chèn nút lên đây.

  3. #3
    Ngày gia nhập
    06 2007
    Nơi ở
    UIT
    Bài viết
    44

    Mình kiếm trong đống code lưu hồi học CTDL cái này viết bạn xem tạm nhé
    C++ Code:
    1. #include<conio.h>
    2. #include<stdio.h>
    3. #include<stdlib.h>
    4.  
    5. #define LH -1 //cây con trái cao hon
    6. #define EH 0 //cây con trái b?ng cây con ph?i
    7. #define RH 1 //cây con ph?i cao hon
    8.  
    9. typedef struct tagAVLNode  
    10. {   char    balFactor; //ch? s? cân b?ng
    11.     int key;
    12.     struct tagAVLNode*  pLeft;
    13.     struct tagAVLNode*  pRight;
    14. }AVLNode;
    15. typedef AVLNode *AVLTree;    
    16.  
    17. void LL(AVLTree &T)
    18. {
    19.     AVLNode *T1=T->pLeft;
    20.     T->pLeft = T1->pRight;
    21.     T1->pRight=T;
    22.     switch(T1-> balFactor)
    23.     { case LH:  T-> balFactor =EH;
    24.                 T1->balFactor=EH; break;
    25.         case EH:    T->balFactor=LH;
    26.                 T1->balFactor =RH; break;
    27.     }
    28.     T=T1;
    29. }
    30.  
    31. void LR(AVLTree &T)
    32. {   AVLNode *T1=T->pLeft;
    33.     AVLNode *T2=T1->pRight;
    34.     T->pLeft=T2->pRight;
    35.     T2->pRight=T;
    36.     T1->pRight= T2->pLeft;
    37.     T2->pLeft = T1;
    38.     switch(T2->balFactor)
    39.     {   case LH:    T->balFactor=RH;
    40.                 T1->balFactor=EH; break;
    41.         case EH:    T->balFactor = EH;
    42.                 T1->balFactor=EH; break;
    43.         case RH:    T->balFactor =EH;
    44.                 T1->balFactor= LH; break;
    45.     }
    46.     T2->balFactor =EH; T=T2;
    47. }
    48.  
    49. void RR(AVLTree &T)
    50. {   AVLNode  *T1= T->pRight;
    51.     T->pRight=T1->pLeft;
    52.     T1->pLeft=T;
    53.     switch(T1-> balFactor)
    54.     {
    55.         case RH:    T-> balFactor = EH;
    56.                 T-> balFactor = EH; break;
    57.         case EH:    T-> balFactor = RH;
    58.                 T1-> balFactor = LH; break;
    59.     }
    60.     T=T1;
    61. }
    62.  
    63. void RL(AVLTree &T)
    64. {   AVLNode  *T1= T->pRight;
    65.     AVLNode *T2=T1->pLeft;
    66.     T->pRight = T2->pLeft;
    67.     T2->pLeft = T;
    68.     T1->pLeft = T2->pRight;
    69.     T2->pRight = T1;
    70.     switch(T2-> balFactor)
    71.     {   case RH:    T-> balFactor = LH;
    72.                 T1-> balFactor = EH; break;
    73.         case EH:    T-> balFactor = EH;
    74.                 T1-> balFactor = EH; break;
    75.         case LH:    T-> balFactor = EH;
    76.                 T1-> balFactor = RH; break;
    77.     }
    78.     T2-> balFactor =EH; T=T2;
    79. }
    80.  
    81. //can bang khi cay lech trai
    82.  
    83. int balanceleft(AVLTree &T)
    84. {
    85.  
    86.     AVLNode *T1=T->pLeft;
    87.     switch(T1->balFactor)
    88.     {
    89.         case LH: LL(T); return 2;
    90.         case EH: LL(T); return 1;
    91.         case RH: LR(T); return 2;
    92.    
    93.     }
    94.     return 0;
    95. }
    96. //can bang khi cay lech phai
    97. int balanceRight(AVLTree &T)
    98. {
    99.     // y het (^-^) ^|
    100. }
    101. int InsertNode(AVLTree &T, int x)
    102. {
    103. // cai nay ban tu lam nhe khong thi chep vao roi chay thi khong hieu gi dau
    104. }
    105.  
    106. void NLR(AVLTree T)
    107. {
    108.     //in cay theo kieu NLR
    109. }
    110. void CreateTree(AVLTree &T)
    111. {
    112.     T=NULL;
    113. }
    114.  
    115. void main()
    116. {
    117.     int a[]={4,5,6};
    118.     int n=3,i;
    119.     AVLTree T;
    120.     CreateTree(T);
    121.    
    122.     for(i=0;i<3;i++)
    123.     {
    124.         InsertNode(T,a[i]);
    125.     }
    126.     NLR(T);
    127.     printf("test %d ",10);
    128.    
    129. }
    Đã được chỉnh sửa lần cuối bởi vtien_uit : 22-05-2008 lúc 12:45 AM.

  4. #4
    Ngày gia nhập
    05 2008
    Bài viết
    1

    Thanks các bạn

Các đề tài tương tự

  1. Bài tập C Xóa 1 nút trong cây nhị phân tìm kiếm
    Gửi bởi akiller12 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 30-09-2013, 07:21 PM
  2. Thêm 1 nút , Xóa 1 nút , Sửa 1 nút, duyệt danh sách theo liên kết phải, theo liên kết trái.
    Gửi bởi dodinhlong trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 23-05-2013, 11:51 AM
  3. Giải thuật xóa các phần tử trong mảng [Thảo luận]
    Gửi bởi trungkien45 trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 16
    Bài viết cuối: 04-03-2013, 03:08 PM
  4. bắt lỗi nút Xóa trong c#
    Gửi bởi dothanhlap trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 10
    Bài viết cuối: 26-04-2011, 11:05 AM
  5. Giải thuật xoá nút bất kỳ trong cây nhị phân, ai biết giúp em với?
    Gửi bởi nguyentuan89 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 23-04-2010, 02:02 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn