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

Đề tài: Cách cài đặt hàm chèn random vào cây nhị phân như thế nào?

  1. #1
    Ngày gia nhập
    03 2011
    Bài viết
    54

    Mặc định Cách cài đặt hàm chèn random vào cây nhị phân như thế nào?

    Thầy em viết cây nhị phân như thế này:
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <string.h>
    4. #include <stdlib.h>
    5. #include <process.h>
    6. #include <time.h>
    7. struct tnode
    8. {
    9.     char word[20];
    10.     struct tnode *left;
    11.     struct tnode *right;
    12. };
    13. typedef struct tnode treenode;
    14.  
    15. treenode* maketreenode(char *word);
    16. treenode *randominsert(treenode* tree, char *word);
    17. treenode *randominsert(treenode* tree, char *word);
    18. void freetree(treenode *tree);
    19. void printpreorder(treenode *tree);
    20. void printpostorder(treenode *tree);
    21. void printinorder(treenode *tree);
    22. int countnodes(treenode *tree);
    23. int depth(treenode *tree);
    24.  
    25. int main()
    26. {
    27.     treenode *randomtree=NULL;
    28.     char word[20];
    29.     while(strcmp (word,"~")!=0)
    30.     {
    31.         printf("\n enter item(~ to finish):");
    32.         scanf("%s",word);
    33.         if(strcmp (word,"~")==0)
    34.           printf("Cham dut nhap thong tin nut\n");
    35.           else randomtree=randominsert(randomtree,word);
    36.          
    37.     }
    38.     printf("The tree in preorder:\n");
    39.     printpreorder(randomtree);
    40.     printf("****************************\n");
    41.     printf("the tree in postorder:\n");
    42.     printpostorder(randomtree);
    43.     printf("****************************\n");
    44.     printf("the tree in inorder:\n");
    45.     printinorder(randomtree);
    46.     printf("****************************\n");
    47.     printf("the number of node is:%d\n",countnodes(randomtree));
    48.     printf("the depth of the sreet is :%d\n",depth(randomtree));
    49.     freetree(randomtree);
    50.     getch();
    51.     return 0;
    52. }
    53. treenode* maketreenode(char *word)
    54. {
    55.     treenode* newnode = NULL;
    56.     newnode=(treenode*)malloc(sizeof(treenode));
    57.     if (newnode ==NULL)
    58.     {
    59.         printf("out of memory\n");
    60.         exit(1);
    61.     }
    62.     else
    63.     {
    64.         newnode->left= NULL;
    65.         newnode->right= NULL;
    66.         strcpy(newnode->word,word);
    67.        
    68.     }
    69.     return newnode;
    70. }
    71. treenode *randominsert(treenode *tree,char *word)
    72. {
    73.     treenode *newnode, *p;
    74.     newnode= maketreenode(word);
    75.     if(tree==NULL) return newnode;
    76.     srand(time(NULL));
    77.     if( rand()%2==0)
    78.     {
    79.         p=tree;
    80.         while(p->left !=NULL) p = p->left;
    81.         p->left=newnode;
    82.         printf("node %s is left child of %s\n",word,p->word);
    83.        
    84.        
    85.     }
    86.     else
    87.     {
    88.         p=tree;
    89.         while(p->right!=NULL) p=p->right;
    90.         p->right=newnode;
    91.         printf("node %s is right child of %s\n",word,p->word);
    92.    
    93.        
    94.     }
    95.     return tree;
    96. }
    97.  
    98. void freetree(treenode *tree)
    99. {
    100.     if(tree==NULL) return;
    101.     freetree(tree->left);
    102.     freetree(tree->right);
    103.     free(tree);
    104.     return;
    105. }
    106.    
    107. void printpreorder(treenode *tree)
    108. {
    109.     if(tree != NULL)
    110.     {
    111.         printf("%s\n ",tree->word);
    112.         printpreorder(tree->left);
    113.         printpreorder(tree->right);
    114.     }
    115. }
    116.  
    117. void printpostorder(treenode *tree)
    118. {
    119.     if(tree !=NULL)
    120.     {
    121.             printpostorder(tree->left);
    122.             printpostorder(tree->right);
    123.             printf("%s\n",tree->word);
    124.        
    125.  
    126.     }
    127. }
    128.  
    129. void printinorder(treenode *tree)
    130. {
    131.     if(tree !=NULL)
    132.     {
    133.             printinorder(tree->left);
    134.             printf("%s\n",tree->word);
    135.             printinorder(tree->right);
    136.     }
    137.    
    138. }
    139.  
    140. int countnodes(treenode *tree)
    141. {
    142.     if(tree==NULL) return 0;
    143.     else
    144.     {
    145.         int ld= countnodes(tree->left);
    146.         int rd= countnodes(tree->right);
    147.         return 1+ld+rd;
    148.        
    149.     }
    150. }
    151.  
    152. int depth(treenode *tree)
    153. {
    154.     if(tree==NULL) return 0;
    155.     int ld= depth(tree->left);
    156.     int rd= depth(tree->right);
    157.     if(ld>rd) return 1+ld;
    158.     else return 1+rd;
    159.    
    160. }

    Em chạy thử nhưng nó random kiểu gì mà chỉ có mỗi nút gốc có đủ con trái và con phải, còn các nút khác chỉ có 1 con, làm thế nào sửa lại hàm randominsert cho hậu duệ của nút gốc có cả con trái và con phải????
    Đã được chỉnh sửa lần cuối bởi vungtroicuabo : 03-11-2011 lúc 10:45 AM.

  2. #2
    Ngày gia nhập
    03 2011
    Bài viết
    54

    anh chị nào rảnh giúp cho em với >.<

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

  1. Kỹ thuật C Tại sao hàm random cho nhiều số thì kết quả random bị trùng lặp?
    Gửi bởi acquydem12 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 18-04-2014, 02:17 PM
  2. Random các số trong mảng như thế nào?
    Gửi bởi quangbinhit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 17-09-2011, 11:00 AM
  3. Các hàm random trong lập trình C/C++ được xây dựng như thế nào?
    Gửi bởi QRFX trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 12-07-2011, 10:32 AM
  4. Hàm random trong C# như thế nào ?
    Gửi bởi tuanvu199x trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 23
    Bài viết cuối: 01-05-2011, 06:44 PM
  5. Kỹ thuật C++ Thắc mắc sử dụng hàm random trong C++ ?
    Gửi bởi dangnghean 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: 25-03-2011, 12:28 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