zoukankan      html  css  js  c++  java
  • 二叉查找树

      1 #ifndef _Tree_H
      2 
      3 struct TreeNode;
      4 typedef struct TreeNode *Position;
      5 typedef struct TreeNode *SearchTree;
      6 
      7 SearchTree MakeEmpty(SearchTree T);
      8 Position Find(ElementType X, SearchTree T);
      9 Position FindMin(SearchTree T);
     10 Position FindMax(SearchTree T);
     11 SearchTree Insert(ElementType X, SearchTree T);
     12 SearcgTree Delete(ElementType X, SearchTree T);
     13 ElementType Retrieve(Position P);
     14 
     15 #endif
     16 
     17 struct TreeNode
     18 {
     19     ElementType Element;
     20     SearchTree Left;
     21     SearchTree Right;
     22 };
     23 
     24 
     25 SearchTree MakeEmpty(SearchTree T)
     26 {
     27     if (T != NULL)
     28     {
     29         MakeEmpty(T->Left);
     30         MakeEmpty(T->Right);
     31         free(T);
     32     }
     33     return NULL;
     34 }
     35 
     36 
     37 Position Find(ElementType X, SearchTree T)
     38 {
     39     if (T == NULL)
     40         return NULL;
     41     if (X < T->Element)
     42         return Find(X, T->Left);
     43     else if (X > T->Element)
     44         return Find(X, T->Right);
     45     else
     46         return T;
     47 }
     48 
     49 
     50 Position FindMin(SearchTree T)
     51 {
     52     if (T == NULL)
     53         return NULL;
     54     else if (T->Left == NULL)
     55         return T;
     56     else
     57         return FindMin(T->Left);
     58 }
     59 
     60 Position FindMax(SearchTree T)
     61 {
     62     if (T != NULL)
     63         while (T->Right != NULL)
     64             T = T->Right;
     65     return T;
     66 }
     67 
     68 
     69 SearchTree Insert(ElementType X, SearchTree T)
     70 {
     71     if (T == NULL)
     72     {
     73         T = malloc(sizeof(struct TreeNode));
     74         if (T = NULL)
     75             perror("Out of Space");
     76         else
     77         {
     78             T->Element = X;
     79             T->Left = T->Right = NULL;
     80         }
     81     }
     82     else if (X < T->Element)
     83         T->Left = Insert(X, T->Left);
     84     else
     85         T->Right = Insert(X, T->Right);
     86 
     87     return T;
     88 }
     89 
     90 
     91 SearchTree Delete(ElementType X, SearchTree T)
     92 {
     93     Position TmpCell;
     94 
     95     if (T == NULL)
     96         perror("Element not found");
     97     else if (X < T->Left)
     98         T->Left = Delete(X, T->Left);
     99     else if(X > T-Right)
    100         T->Right = Delete(X, T->Right);
    101 
    102     else if (T->Left && T->Right)
    103     {
    104         TmpCell = FindMin(T->Right);
    105         T->Element = TmpCell->Element;
    106         T->Right = Delete(T->Element, T->Right);
    107     }
    108     else
    109     {
    110         TmpCell = T;
    111         if (T->Left == NULL)
    112             T = T->Right;
    113         else if (T->Right == NULL)
    114             T = T->Left;
    115         free(TmpCell);
    116     }
    117 
    118     return T;
    119 }
  • 相关阅读:
    STM32的CRC32 软件实现代码
    AES CBC/CTR 加解密原理
    Either, neither, both
    Answer Sheet
    Both
    How to convert a byte to its binary string representation
    how convert large HEX string to binary array ?
    TEA -- Tiny Encryption Algorithm
    DES
    IAR EWARM Checksum Technical Note
  • 原文地址:https://www.cnblogs.com/bournet/p/3962277.html
Copyright © 2011-2022 走看看