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

数据结构

开发平台:

C/C++

  1. /* ======================================== */
  2. /*    程式实例: 7_4_2.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 insertnode(btree root,int value)
  18. {
  19.    btree newnode;                 /* 树根指标           */
  20.    btree current;                 /* 目前树节点指标     */
  21.    btree back;                    /* 父节点指标         */
  22.    /* 建立新节点记忆体 */
  23.    newnode = ( btree ) malloc(sizeof(treenode));
  24.    newnode->data = value;         /* 建立节点内容       */
  25.    newnode->left = NULL;          /* 设定指标初值       */
  26.    newnode->right = NULL;         /* 设定指标初值       */
  27.    if ( root == NULL )            /* 是否是根节点       */
  28.    {
  29.       return newnode;             /* 传回新节点位置     */
  30.    }
  31.    else
  32.    {
  33.       current = root;             /* 保留目前树指标     */
  34.       while ( current != NULL )
  35.       {
  36.          back = current;          /* 保留父节点指标     */
  37.          if ( current->data > value ) /* 比较节点值     */
  38.             current = current->left;  /* 左子树         */
  39.          else
  40.             current = current->right; /* 右子树         */
  41.       }
  42.       if ( back->data > value )   /* 接起父子的链结     */
  43.          back->left = newnode;    /* 左子树             */
  44.       else
  45.          back->right = newnode;   /* 右子树             */
  46.    }
  47.    return root;                   /* 传回树根指标       */
  48. }
  49. /* ---------------------------------------- */
  50. /*  建立二叉树                              */
  51. /* ---------------------------------------- */
  52. btree createbtree(int *data,int len)
  53. {
  54.    btree root = NULL;             /* 树根指标           */
  55.    int i;
  56.    for ( i = 0; i < len; i++ )    /* 用回路建立树状结构 */
  57.       root = insertnode(root,data[i]);
  58.    return root;
  59. }
  60. /* ---------------------------------------- */
  61. /*  二叉树前序遍历                          */
  62. /* ---------------------------------------- */
  63. void preorder(btree ptr)
  64. {
  65.    if ( ptr != NULL )             /* 终止条件           */
  66.    {
  67.       printf("[%2d]n",ptr->data);  /* 列印节点内容     */
  68.       preorder(ptr->left);        /* 左子树             */
  69.       preorder(ptr->right);       /* 右子树             */
  70.    }
  71. }
  72. /* ---------------------------------------- */
  73. /*  主程式: 建立二叉树且用前序遍历列印出来. */
  74. /* ---------------------------------------- */
  75. void main()
  76. {
  77.    btree root = NULL;             /* 树根指标           */
  78.    /* 二叉树节点数据 */
  79.    int data[9] = { 5, 6, 4, 8, 2, 3, 7, 1, 9 };
  80.    root = createbtree(data,9);    /* 建立二叉树         */
  81.    printf("树的节点内容 n");
  82.    preorder(root);                /* 前序遍历二叉树     */
  83. }