7_5.C
上传用户:wyn840322
上传日期:2007-01-13
资源大小:294k
文件大小:2k
源码类别:

数据结构

开发平台:

C/C++

  1. /* ======================================== */
  2. /*    程式实例: 7_5.c                       */
  3. /*    树状结构的递归建立法                  */
  4. /* ======================================== */
  5. #include <stdlib.h>
  6. struct tree                       /* 树的结构宣告       */
  7. {
  8.    int data;                      /* 节点数据           */
  9.    struct tree *left;             /* 指向左子树的指标   */
  10.    struct tree *right;            /* 指向右子树的指标   */
  11. };
  12. typedef struct tree treenode;     /* 树的结构新型态     */
  13. typedef treenode *btree;          /* 宣告树节点指标型态 */
  14. /* ---------------------------------------- */
  15. /*  建立树状结构                            */
  16. /* ---------------------------------------- */
  17. btree createbtree(int *data,int pos)
  18. {
  19.    btree newnode;                 /* 新节点指标         */
  20.    if ( data[pos] == 0 || pos > 15 )  /* 终止条件       */
  21.       return NULL;
  22.    else
  23.    {
  24.       /* 建立新节点记忆体 */
  25.       newnode = ( btree ) malloc(sizeof(treenode));
  26.       newnode->data = data[pos];  /* 建立节点内容       */
  27.       /* 建立左子树的递归呼叫 */
  28.       newnode->left = createbtree(data,2*pos);
  29.       /* 建立右子树的递归呼叫 */
  30.       newnode->right = createbtree(data,2*pos+1);
  31.       return newnode;
  32.    }
  33. }
  34. /* ---------------------------------------- */
  35. /*  二叉树的中序遍历递归列印                */
  36. /* ---------------------------------------- */
  37. void printbtree(btree ptr)
  38. {
  39.    if ( ptr != NULL )             /* 终止条件           */
  40.    {
  41.       printbtree(ptr->left);      /* 左子树             */
  42.       printf("[%2d]",ptr->data);  /* 列印节点内容       */
  43.       printbtree(ptr->right);     /* 右子树             */
  44.    }
  45. }
  46. /* ---------------------------------------- */
  47. /*  主程式: 建立链结的二叉树且列印出来.     */
  48. /* ---------------------------------------- */
  49. void main()
  50. {
  51.    btree root = NULL;             /* 树根指标           */
  52.    int i;
  53.    /* 二叉树节点数据 */
  54.    int data[16] = { 0, 5, 4, 6, 2, 0, 0, 8, 1,
  55.                     3, 0, 0, 0, 0, 7, 9 };
  56.    root = createbtree(data,1);    /* 建立树状结构       */
  57.    printf("数组的节点内容 n");
  58.    for ( i = 1; i < 16; i++ )
  59.       printf("[%2d]",data[i]);    /* 列印节点内容       */
  60.    printf("n");                  /* 换行               */
  61.    printf("树的节点内容 n");
  62.    printbtree(root);              /* 列出节点内容       */
  63.    printf("n");                  /* 换行               */
  64. }