El principio y la realización del árbol de clasificación binaria de la estructura de datos.

      El árbol de ordenación binaria (árbol de ordenación binaria) también se denomina árbol de búsqueda binaria.

naturaleza:

      Si su subárbol izquierdo no está vacío, los valores de todos los nodos del subárbol izquierdo son menores que el valor del nodo raíz;

      Si su subárbol derecho no está vacío, los valores de todos los nodos del subárbol derecho son mayores que el valor del nodo raíz;

      Sus subárboles izquierdo y derecho también son árboles de clasificación binaria respectivamente;

La definición de la estructura de nodo de la lista binaria enlazada del árbol binario:

typedef struct BiTNode               //节点结构
{
    int data;                        //数据点
    struct BiNode *lchild,*rchild;   //左右孩子指针
}BiTNode,*BiTree;

Implementación del algoritmo de búsqueda del árbol de ordenamiento binario:

/**
 * 递归查找二叉排序树T中是否存在key
 * 指针f指向T的双亲,其初始化调用值为NULL
 * 若查找成功,则指针p指向该数据元素节点,并返回TRUE
 * 否则指针p指向查找路径上访问的最后一个节点并返回FALSE
*/
Status SearchBST(BiTree T,int key, BiTree f,BiTree *p)
{
    if(!T)              //查找失败
    {
        *p = f;
        return FALSE;
    }
    else if (key == T->data)     //查找成功
    {
        *p = T;
        return TRUE;
    }
    else if(key < T->data)
        return SearchBST(T->lchild, key, T, p);         //在左子树继续查找
    else 
        return SearchBST(T->rchild, key, T, p);       //在右子树继续查找
}

Operación de inserción de árbol de ordenación binaria:

/**
 * 二叉排序树的插入操作
 * 当二叉排序树T中中不存在关键字等于Key的数据元素时
 * 插入key并返回true,否则返回false
*/

Status InsertBST(BiTree *T, int key)
{
    BiTree p,s;
    if(!SearchBST(*T, key,NULL, & p))     //查找不成功
    {
        s = (BiTree)malloc(sizeof(BiTNode));
        s->data = key;
        s->lchild = s->rchild = NULL;
        if(!p)
            *T = s;                      //插入s为新的根节点
        else if(key < p->data)
            p->lchild = s;              //插入s为左孩子
        else
            p->rchild = s;              //插入s为右孩子 
        return TRUE;
    }
    else
    {
        return FALSE;               //树中已经有关键字相同的节点,不再插入
    }
    
}

 

Supongo que te gusta

Origin blog.csdn.net/songjun007/article/details/108542895
Recomendado
Clasificación