<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      RodneyX

      博客園 首頁 新隨筆 聯系 訂閱 管理

      BST,即二叉搜索樹,該數據結構規定任意若一個結點存在左子樹,那么該結點鍵必須要大于左子樹上所有鍵;若有右子樹,那么該結點鍵必須要小于右子樹上所有鍵

      簡單的BST是樹形查找里的入門級數據結構,不涉及平衡性調節,只需要簡單插入刪除,即可,其中刪除稍復雜,但是也不難,只需要把三種情況分清即可。簡單的BST因為不存在平衡調節,所以針對某些特定序列(如已排序序列依次插入)在構造好BST后,事實上退化為鏈表,這樣搜索效率大幅下降到O(n)

      今天先貼個簡單BST實現,改天再貼個AVL樹的實現

      typedef struct BSTnode {
          struct BSTnode *left, *right;
          int data;
      }BSTnode, *BST;
      
      //simple BST
      BST batch_create_BST(int a[], int n);
      void destroy_BST(BST &T);
      bool insert_BST(BST &T, int e);
      bool delete_BST(BST &T, int e);
      bool find_BST(BST &T, int e);
      
      BST batch_create_BST(int a[], int n)
      {
          BST T = nullptr;
          for (int i = 0; i < n; ++i)
              insert_BST(T, a[i]);
          return T;
      }
      
      void destroy_BST(BST &T)
      {
          if (!T)
              return;
          destroy_BST(T->left);
          destroy_BST(T->right);
          free(T);
          T = nullptr;
      }
      
      bool insert_BST(BST &T, int e)
      {
          if (!T)
          {
              T = (BSTnode *)malloc(sizeof(BSTnode));
              T->data = e;
              T->left = T->right = nullptr;
              return true;
          }
          if (e > T->data)
              return insert_BST(T->right, e);
          else if (e < T->data)
              return insert_BST(T->left, e);
          return false;
      }
      
      bool delete_BST(BST &T, int e)
      {
          if (!T) // 空樹刪除失敗
              return false;
          if (T->data == e) // 特殊處理根節點刪除
          {
              if (T->left && T->right) // 根有左右子樹
              {
                  BSTnode *p = T, *q = T->left;
                  while (q->right) // 找到根節點的前驅以及前驅的父結點
                  {
                      p = q;
                      q = q->right;
                  }
                  T->data = q->data; // 覆蓋根的元素
                  // 以下刪除q
                  if (p->left == q)
                      p->left = q->left != nullptr ? q->left : q->right; // 這里可以處理葉節點情況
                  else
                      p->right = q->left != nullptr ? q->left : q->right; // 同上
                  free(q);
                  q = nullptr;
              }
              else // 僅有左或右子樹以及葉結點情況
              {
                  BSTnode *del = T;
                  T = T->left != nullptr ? T->left : T->right; // 事實上這里也能處理單節點情況
                  free(del);
                  del = nullptr;
              }
          }
          else // 刪除內部結點
          {
              BSTnode *p = nullptr, *q = T;
              while (q && q->data != e) // 查找待刪除結點及其父結點
              {
                  p = q;
                  q = q->data > e ? q->left : q->right;
              }
              if (!q) // 沒有這個結點刪除失敗
                  return false;
              if (q->left && q->right) // 具有左右子樹的結點刪除
              {
                  BSTnode *pre = q, *del = q->left;
                  while (del->right) // 尋找待刪除結點的中序直接前驅以及這個前驅的父結點
                  {
                      pre = del;
                      del = del->right;
                  }
                  q->data = del->data; // 前驅直接覆蓋原本待刪除結點
                  // 以下刪除del
                  if (pre->left == del)
                      pre->left = del->left != nullptr ? del->left : del->right; // 可以處理葉結點情況
                  else
                      pre->right = del->left != nullptr ? del->left : del->right;
                  ; // 同上
                  free(del);
                  del = nullptr;
              }
              else    // 僅有單子樹的結點或葉結點刪除
              {
                  if (p->left == q)
                      p->left = q->left != nullptr ? q->left : q->right; // 根據這里可以將前面的葉結點刪除作優化掉
                  else
                      p->right = q->left != nullptr ? q->left : q->right; // 同上
                  free(q);
                  q = nullptr;
              }
          }
          return true;
      }
      
      bool find_BST(BST &T, int e)
      {
          BSTnode *p = T;
          while (p)
          {
              if (e > p->data)
                  p = p->right;
              else if (e < p->data)
                  p = p->left;
              else
                  break;
              ;
          }
          if (p)
              return true;
          else
              return false;
      }
      
      posted on 2025-08-19 08:32  RodneyX  閱讀(24)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产无遮挡真人免费视频| 国产电影无码午夜在线播放| AV毛片无码中文字幕不卡| 国产主播精品福利午夜二区| 2020国产成人精品视频| 性欧美暴力猛交69hd| 国产欧美日韩在线在线播放| 任我爽精品视频在线播放| 奇米影视7777狠狠狠狠色| 日韩精品一区二区av在线| 亚洲熟妇无码爱v在线观看| 国产一区二区三区免费观看| 精品一区精品二区制服| 亚洲一区二区经典在线播放| 久久天天躁夜夜躁狠狠85| 亚洲自拍偷拍福利小视频| 亚洲Av综合日韩精品久久久| 99国产欧美另类久久久精品| 北岛玲亚洲一区二区三区| 日本亚洲色大成网站www久久| 五月天国产成人av免费观看| 日韩精品一区二区三区日韩| 国产老熟女国语免费视频| 免费国产一级特黄aa大片在线| 军人粗大的内捧猛烈进出视频| 色综合 图片区 小说区| 久久久久久综合网天天| 国产女人叫床高潮大片| 少妇人妻偷人偷人精品| 国产成人a在线观看视频免费| 成人欧美日韩一区二区三区| 精品亚洲精品日韩精品| 99热久久这里只有精品| 五月婷婷开心中文字幕| AV人摸人人人澡人人超碰| 国产午夜精品在人线播放| 国产精品人妻一码二码尿失禁| 丰满人妻熟妇乱又仑精品| 国产精品美女久久久久久麻豆| 麻豆国产va免费精品高清在线| 激情国产一区二区三区四|