zoukankan      html  css  js  c++  java
  • 二叉搜索树的删除和联结

    在一个二叉搜索树中删除带有给定关键字的节点。这个删除操作的实现删除在BST中遇到的第一个带有给定关键字v的节点。它从上向下处理,为适当的子树作递归调用,直到要删除的节点位于树根处。然后,它用两棵子树结合的结果取代该节点--右子树中最小的节点成为树根,接着把它的左链接设置成指向左子树。

     1 private:
     2     link joinLR(link a, link b)
     3     {
     4       if (b == 0) return a;
     5       partR(b, 0); b-> = a;
     6       return b;
     7      }
     8     void removeR(link& h, Key v)
     9     { if (h == 0) return;
    10        Key w = h->item.key();
    11        if (v < w) removeR(h->l, v);
    12        if (w < v) removeR(h->r, v);
    13        if (v == w)
    14        { link t = h;
    15           h = joinLR(h->l, h->r); delet t;
    16         }
    17      }
    18 public: 
    19     void remove(Item x)
    20     {removeR(head, x.key());}

     两棵二叉搜索树的联结

    如果任一二叉搜索树为空,另外一棵就是结果。否则,我们通过以下步骤结合两棵二叉搜索树:随意地挑选第一棵树的根作为树根,用根插入方法把它插入到第二棵,然后递归地结合左子树对和右子树对。

     1 private:
     2     link joinR(link a, link b)
     3     {if (b == 0) return a;
     4       if (a == 0) return b;
     5       insertT(b, a->item);
     6       b->l = joinR(a->l, b->l);
     7       b->r = joinR(a->r, b->r);
     8       delete a; return b;
     9      }
    10 public:
    11     void join(ST<Item, Key>&b)
    12     {head = joinR(head, b.head);}
  • 相关阅读:
    dp uva1025
    dp uva10003
    dp最优矩阵相乘poj1651
    dp uva11584
    动态规划uva11400
    流形学习 (Manifold Learning)
    tf.nn.embedding_lookup
    word2vec
    word2vec 细节解析1
    collections-Counter
  • 原文地址:https://www.cnblogs.com/ningjing213/p/12880299.html
Copyright © 2011-2022 走看看