【C语言】基本数据结构-二叉查找树(二叉搜索树,二叉排序树)

目录

1.背景介绍

1.1 树的介绍

1.2 二叉树的优势

1.3 二叉查找树的性质

2.二叉查找树的链表实现

2.1 节点声明

2.2 建立空的二叉查找树

2.3 二叉查找树中的最小值

2.4 二叉查找树中的最大值

2.5 查找指定元素并返回地址

2.6 在二叉查找树中插入新元素

2.7 在二叉查找树中删除元素


1.背景介绍

1.1 树的介绍

        和之前的链表,栈,队列不同,树是一种非线性结构。每个树都由父节点和子节点构成。最初始的父节点被称为根节点,除去根节点之外的所有节点都有其对应的父节点。

1.2 二叉树的优势

        在前面几章我们学习了链表的相关使用,然而如果有大量的输入数据,用普通链表进行访问时需要从头节点开始挨个查询,查询速度就很慢。

        为了在提高在大量输入数据情况下的查询,插入,删除速度,这里就引出了二叉树这个概念,二叉树是一种特殊的树,每个节点的子节点不能多于两个。二叉树的特殊结构使得在进行以上操作时速度较快。

1.3 二叉查找树的性质

        二叉查找树又被称为二叉排序树或者二叉搜索树,它的基本性质是:对于树中的每个节点pNode,它的左子树中的元素值要小于当前节点的元素值,它的右子树中的元素值要大于当前节点的元素值。

        即对于任意的节点来说:左子树值< 当前节点值 < 右子树值

2.二叉查找树的链表实现

        二叉查找树的实现需要对链表相关知识有所了解。对链表不是很熟悉的可以看看下面这个连接。

【C语言】常用的数据结构-单链表-CSDN博客

2.1 节点声明

        二叉查找树由多个节点组成,因此我们首先需要声明节点,和声明链表节点类似,二叉树节点也有数据域和指针域构成,数据域用来存储数据,指针域用来指向它的子节点。

struct node
{
    int element;   //数据域
    struct node *left;  //指向左边的子节点
    struct node *right; //指向右边的子节点
}

2.2 建立空的二叉查找树

        要建立一棵空树,实际上就是只建立一个根节点,并将他的指针域指向NULL即可。

//建立一棵空树
BOOL init_tree(struct node **pTree)
{
    *pTree = (struct node *)malloc(sizeof(struct node)); 
    if(NULL = *pTree)
    {
        return FALSE;     //申请树的根节点内存失败
    }
    (*pTree)->left = NULL;
    (*pTree)->right = NULL;
    
    return TRUE;
}

//测试用例
struct node *pTree = NULL;
bool ret = init_tree(&pTree);

2.3 二叉查找树中的最小值

        查找二叉树中的最小值即找到整个二叉树中最左边的节点即可。

int find_MinElement(struct node *pTree)
{
    if(NULL

你可能感兴趣的:(数据结构相关(C语言),数据结构,c语言,链表)