STL关联容器

来源:互联网 发布:xp添加网络打印机 url 编辑:程序博客网 时间:2024/06/03 00:04

5.1 树的导览

5.1.1 二叉搜索树

二叉树是指任何节点最多只有两个子节点;而二叉搜索树(也称二叉查找树)的规则如下:

  • 对数时间的元素插入和访问;
  • 任何节点键值一定大于其左子树中的每一个节点的键值,一定小于其右子树节点的键值。

根据上面的定义,判断下图中的树哪个不是二叉搜索树:

左边的是,右边的不是;因为根节点的键值6小于左子树中其中一个节点的键值7。请记住:从根节点一直往左(右)走,直到无左(右)路可走,即得最小(大)元素。如下图所示:

5.1.2 操作

二叉搜索树的常用操作有:查找最小/大元素,插入及删除元素。下面给出具体的操作步骤。注意:这里以int型数据作为研究对象,当然可以写成模板,这里一切从简,以聚焦于算法的原理。

节点结构体

struct Node{    int element             // 以int型数据为例    Node *pLeft, *pRight;   // 指向左右子节点的指针};

查找最小节点

要在一颗二叉搜索树中查找最大值或最小值,一直往右或往左走即可。这里只给出查找最小节点的程序,查找最大节点类似,下面代码中的pLeft换成pRight即可;注意边界条件的判断也相当重要,尤其在面试时,不可忘记!!!

// 递归实现Node* findMin(Node* bsTree){    // 边界条件判断    if(bsTree == NULL)        return NULL;    else if(bsTree->pLeft == NULL)        return bsTree;    else        findMin(bsTree->pLeft);}// 非递归实现Node* findMin(Node* bsTree){    if(bsTree == NULL)        return NULL;    while(bsTree->pLeft != NULL)    {        bsTree = bsTree->pLeft;    }    return bsTree;}

这里找到了最小的节点(Node* node),那么结构体中的数据轻而易得(node->element)!

0 0