
1概述二进制排序树(Binary Sorting Tree)是一个空树或具有以下属性:
(1)如果具有左子树,则左子树上所有节点的数据都小于根节点的数据;
(2)如果具有右子树,则右子树中所有节点的数据都大于根节点的数据;
(3)左和右子树本身就是二进制排序树.

如下所示:
![《[总结] 二叉排序树》](http://ddrvcn.oss-cn-hangzhou.aliyuncs.com/2019/11/MF7Rra.gif)
易于理解: 非空二进制排序树中的节点数据按左子树,树和右子树的顺序排列. 因此,通过遍历获得的节点序列是有序序列. 对于上图所示的二进制排序树,顺序遍历的结果为:
12,24,28,37,40,45,53,55,60,70

可以看出序列是按升序排列的.
通常,二进制链接列表可以用作二进制排序树的存储结构,并且可以在此基础上执行诸如搜索,插入和删除之类的操作. 存储结构如下: typedef struct bst {int data; struct bst *左; struct bst *正确; } BSTREE,* pBSTREE; 2二进制排序树搜索二进制排序树也称为二进制搜索树. 当二元排序树不为空时,首先将键值与根节点的关键字进行比较,如果相等,则搜索成功,否则根据给定值与根节点的关键字的大小关系,分别在其左侧或右侧子树上查找.
2.1二进制排序树搜索的递归实现递归在根指针t指向的二进制排序树中查找一个键等于键的元素. 如果搜索成功,则返回指向数据元素的指针二叉排序树查找 算法,否则返回Null指针. pBSTREE SearchBST_recur(pBSTREE t,int key){if(!t || key == t-> data)返回t;否则(key
在插入二进制排序树之前,您需要找到插入位置. 与上述简单的元素搜索不同,您还需要知道所插入节点的父节点. 仍然假设t是根指针,然后将一个新节点添加到二叉树中,键为键,具体过程如下:

(1)申请保存节点pnew的内存,并将关键字保存在节点的data字段中;
(2)在二进制排序树中找到插入节点pnew的父节点;
(3)将节点p的数据与父节点的数据进行比较,并确定是否将pnew插入到父节点的左侧或右侧子树中.
这里也用两种方法来实现,即递归和非递归.

3.1对递归搜索算法的小修改由于您需要了解插入节点的父节点,因此对2.1中的搜索算法进行小修改,以在搜索不成功时返回到插入位置.
在根指针t指向的二进制排序树中递归搜索其键等于键的数据元素. 如果搜索成功,则指针p指向的数据元素节点返回true;否则,返回true. 否则,p指向搜索路径. 访问最后一个节点并返回false;否则,返回false. 指针parent指向t的父对象,其初始化调用为NULL. bool SearchBST_recur_v2(pBSTREE t,int key,pBSTREE parent,pBSTREE p){if(!t){p = parent;返回false;}否则,如果(t-> data == key){p = t;返回true;}否则,如果(t-> data
这里有两个部分来查找插入点和插入数据. void InsertBST(BSTREE * t,int key){BSTREE * pnew,* parent,* p; p = t; assert(pnew =(BSTREE *)malloc(sizeof(BSTREE)));; pnew-> data =键; pnew-> left = pnew-> right = NULL; while(p){parent = p;如果(键
这表明二元排序树不仅具有半查找的特征,而且还使用链作为存储结构,具有链存储结构的一些优点.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-280381-1.html
还是黄岩岛边12海里
那里的岛礁有许多在自然状况下是当涨潮时处于海面以下的