二叉樹轉換鏈表

 

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 typedef struct node{
  5     int num;
  6     struct node *left;
  7     struct node *right;
  8 }node;
  9 
 10 void build_node(node **anode, int num)
 11 {
 12     if(*anode == NULL){
 13         (*anode) = calloc(1, sizeof(node));
 14         if((*anode) == NULL){
 15             perror("calloc error:");
 16             return;
 17         }
 18         (*anode)->num = num;
 19      }else if((*anode)->num > num){
 20         build_node(&(*anode)->left, num);
 21      }else if((*anode)->num == num){
 22 
 23      }else{
 24         build_node(&(*anode)->right, num);
 25      }
 26 }
 27 void read_node(node *anode)
 28 {
 29     if(anode == NULL)
 30         return;
 31     if(anode->left != NULL)
 32         read_node(anode->left);
 33 
 34     printf("%d\n", anode->num);
 35 
 36     if(anode->right != NULL)
 37         read_node(anode->right);
 38 }
 39 void convert_node(node *anode, node **list)
 40 {
 41     if(anode == NULL)
 42         return;
 43 
 44     if(anode->left != NULL)
 45         convert_node(anode->left, list);
 46     /*
 47      * 思考方式,首先考慮通常狀況,最後再考慮頭尾狀況
 48      * 由於不更改節點num,只更改left,right。因此考慮
 49      * left,right狀況便可。
 50      */
 51     anode->left = *list;
 52     if(*list != NULL)
 53         (*list)->right = anode;
 54     /*下一次循環作準備*/
 55     *list = anode;
 56 
 57     if(anode->right != NULL)
 58         convert_node(anode->right, list);
 59 }
 60 void convert_node2(node *anode, node **list)
 61 {
 62     if(anode == NULL)
 63         return;
 64 
 65     if(anode->right != NULL)
 66         convert_node2(anode->right, list);
 67     /*
 68      * 倒序遍歷可得鏈表頭節點。
 69      * 由於正序遍歷時順序創建鏈表節點,最後得尾節點。
 70      */
 71     anode->right = *list;
 72     if(*list != NULL)
 73         (*list)->left = anode;
 74     /*下一次循環作準備*/
 75     *list = anode;
 76 
 77     if(anode->left != NULL)
 78         convert_node2(anode->left, list);
 79 }
 80 int main(void)
 81 {
 82     node *anode = NULL;
 83     node *llist = NULL, *rlist = NULL;
 84 
 85     build_node(&anode, 11);
 86     build_node(&anode, 7);
 87     build_node(&anode, 14);
 88     build_node(&anode, 4);
 89     build_node(&anode, 8);
 90     build_node(&anode, 12);
 91     build_node(&anode, 16);
 92 
 93     //read_node(anode);
 94 
 95     convert_node(anode, &rlist);
 96     //convert_node2(anode, &llist);
 97     while(rlist != NULL){
 98         printf("%d\n", rlist->num);
 99         rlist = rlist->left;
100     }
101     while(llist != NULL){
102         //printf("%d\n", llist->num);
103         //llist = llist->right;
104     }
105     return 0;
106 }

不知道那麼多人轉來轉去幹什麼,又不測試,轉個有問題的代碼node

相關文章
相關標籤/搜索