zoukankan      html  css  js  c++  java
  • c语言编程之二叉排序树

    二叉排序树,又称为二叉查找树。它是一颗空树,或者是具有下面的性质的二叉树:

    1、若它的左子树不空,则左子树上所有节点的值均小于它的根结构的值;

    2、若它的右子树不空,则右子树上所有节点的值均大于它的根结构的值;

    二叉排序树的建立主要由以下几个步骤组成:

      1、查找

      2、添加(插入)

    完成了上面两个步骤一个二叉排序树就算是建立好了。

      

     1  1 #include<stdio.h>
     2   2 #include<stdlib.h>
     3   3 
     4   4 typedef int element;
     5   5 typedef struct Node{
     6   6         struct Node *lchild,*rchild;
     7   7         element data;
     8   8 }*pNode;
     9   9 
    10  10 //search a data from a sort tree
    11  11 element Sear_tree(pNode T,element num,pNode f,pNode *P)
    12  12         {
    13  13             if(!T)
    14  14               {
    15  15                *P=f;
    16  16                printf("Tree is empty
    ");
    17  17                return 0;
    18  18               }
    19  19             else if(num==(T->data))
    20  20               {
    21  21                 *P=T;
    22  22                 printf("find the data%d
    ",(*P)->data);
    23  23                 return 1;
    24  24               }
    25  25             else if(num<(T->data))
    26  26               {
    27  27                 return Sear_tree(T->lchild,num,T,P);
    28  28               }
    29  29             else if(num>(T->data))
    30  30               {
    31  31                 return Sear_tree(T->rchild,num,T,P);
    32  32               }
    33  33 }
    34  34 
    35  35 //delete a data from a sort tree
    36  36 element Dele_tree()
    37  37         {
    38  38 
    39  39 }
    40  40 
    41  41 //add a data from a sort tree
    42  42 element Add_tree(pNode *T,element num)
    43  43         {
    44  46            //S=(pNode)malloc(sizeof(struct Node));
    45  47            if(!Sear_tree(*T,num,NULL,&P))
    46  48                 {
    47  49                    S=(pNode)malloc(sizeof(struct Node));
    48  50                    S->lchild=S->rchild=NULL;
    49  53                      {
    50  54                         *T=S;
    51  55                         (*T)->data=num;
    52  56                         printf("root data:%d
    ",(*T)->data);
    53  57                      }
    54  58                    else if(num<(P->data))
    55  59                      {
    56  60                         P->lchild=S;
    57  61                         (P->lchild)->data=num;
    58  63                      }
    59  64                    else
    60  65                      {
    61  66                         P->rchild=S;
    62  67                         (P->rchild)->data=num;
    63  69                      }
    64  70                  return 1;
    65  71                 }
    66  72             else
    67  73                 return 0;
    68  74         }
    69  75 
    70  76 //init a sort tree
    71  77 element Init_tree(pNode *T)
    72  78         {
    73  79            *T=NULL;
    74  80 }
    75  81 
    76  82 //build a sort tree
    77  83 element Build_tree(pNode *T)
    78  84         {
    79  85            element data[]={62,88,58,47,35,73,51,99,37,93};
    80  86            element i=0;
    81  87                 for(;i<10;i++)
    82  88                   {
    83  89                     Add_tree(&T,data[i]);
    84  90                   }
    85  91 }
    86  92 
    87  93 element main()
    88  94         {
    89  95           pNode P=NULL;
    90  96           pNode T=NULL;
    91  97           Build_tree(&P);
    92  98           Sear_tree(&P,93,NULL,&T);
    93  99         }
  • 相关阅读:
    webDriver检索table数据
    C# 遍历枚举
    Java——Iterate through a HashMap
    Java——Read/convert an InputStream to a String
    简单的异步HTTP服务端和客户端
    授信主体查找
    mysql 事务测试
    mysql 替换
    如何查看由EF生成的SQL?
    C# 如何用多字符分割字符串
  • 原文地址:https://www.cnblogs.com/qiuheng/p/5831641.html
Copyright © 2011-2022 走看看