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

数据结构

开发平台:

C/C++

  1. /* ======================================== */
  2. /*    程序实例: 10_7.c                      */
  3. /*    二叉查找树排序法                      */
  4. /* ======================================== */
  5. #include <stdlib.h>
  6. /* ---------------------------------------- */
  7. /*  建立二叉查找树                          */
  8. /* ---------------------------------------- */
  9. void createbtree(int *btree,int *data,int len)
  10. {
  11.    int level;                     /* 树的层数           */
  12.    int i;
  13.    btree[1] = data[1];            /* 建立根结点         */
  14.    for ( i = 2; i <= len; i++ )   /* 用回路建立其它结点 */
  15.    {
  16.       level = 1;                  /* 从层数1开始        */
  17.       while ( btree[level] != 0 ) /* 是否有子树         */
  18.       {
  19.          if ( data[i] > btree[level] )  /* 是左或右子树 */
  20.             level = level * 2 + 1;      /* 右子树       */
  21.          else
  22.             level = level * 2;    /* 左子树             */
  23.       }
  24.       btree[level] = data[i];     /* 存入结点数据       */
  25.    }
  26. }
  27. /* ---------------------------------------- */
  28. /*  二叉树中序遍历                          */
  29. /* ---------------------------------------- */
  30. void inorder(int *btree,int pos)
  31. {
  32.    if ( btree[pos] != 0 && pos < 16 )   /* 终止条件     */
  33.    {
  34.       inorder(btree,pos*2+1);     /* 左子树             */
  35.       printf("[%d]",btree[pos]);  /* 输出结点内容       */
  36.       inorder(btree,pos*2);       /* 右子树             */
  37.    }
  38. }
  39. /* ---------------------------------------- */
  40. /*  主程序: 使用二叉查找树执行排序         */
  41. /* ---------------------------------------- */
  42. void main()
  43. {
  44.    int btree[16];                 /* 二叉树数组        */
  45.    /* 二叉树结点数据 */
  46.    int data[10] = { 0, 5, 6, 4, 8, 2, 3, 7, 1, 9 };
  47.    int i;
  48.    for ( i = 1; i < 16; i++ )     /* 清除二叉树数组    */
  49.       btree[i] = 0;
  50.    createbtree(btree,data,9);     /* 建立二叉查找树     */
  51.    printf("二叉查找树的内容: ");
  52.    for ( i = 1; i < 16; i++ )     /* 输出出二叉查找树   */
  53.       printf("[%d]",btree[i]);
  54.    printf("n输出的排序结果: ");
  55.    inorder(btree,1);              /* 输出排序结果       */
  56.    printf("n");                  /* 换行               */
  57. }