1。算法简介
二叉排序树(Binary Sort Tree),也称为二叉搜索树(Binary Search Tree),也称为二叉搜索树。树属于一种输入数据,默认情况下会生成顺序数据结构。这与本章前面的内容中描述的特定数据段内的静态搜索不同。动态搜索是一种会自动对输入的数据结构进行排序,之前写的STL中的集合集合底层就是一个类似树形结构的红黑树。
2。定义
二叉排序树具有以下性质:
a)如果是左子树不空,那么子树左边的所有节点的值都小于或等于其根节点的值;
b) 如果右子树不为空,则右子树上所有节点的值都大于等于其根节点的值;
c) 左子树和右子树分别也是二叉排序树;
也就是说,对于每个根节点,其左子节点始终小于根,其右子节点始终大于根。
3。搜索
请记住,如果树为空,则搜索结束并且没有匹配项。如果查找到的值等于根节点的值,则查找成功。否则,继续寻找子树。如果查找的值小于根节点的值,则选择左子树,如果查找的值大于根节点的值,则选择右子树。
参考代码如下:
typedef int us; int数据; struct BiTNode *lchild, *rchild; } BiTNode, *BiTree; Status SearchBST(BiTree t, int p, Bi❀❀p) * { if ( !t) *p = f; 返回FALSE; ) /* 搜索成功 */ { } 其他 如果 ) > 返回 参见archBST(t->lchild, key, t, p); else4.插入方法及实现 二分排序的插入是在二分排序的基础上进行的排序搜索,插入节点就是通过搜索找到节点合适的插入位置,直接将节点插入其中。事实上,2.2节中逐步构建二叉排序树的过程就是节点插入过程。并且考虑到搜索的关键字已经在树中,它指向数据节点。如果搜索的关键字不在树中,则指向搜索路径的最后一个节点。 参考代码 struct BiTree { ❝ data;BiTree *lchild;BiTree *rchild};BiTree* InsertBST(BiTree *t, key){ if t == NULL) =t BiTree() ; t->lchild = t->rchild = NULL; t->data = key; 返回 } if (键 数据) t->lchild =->insertBST( >lchild,); else t->rchild = InsertBST(t->rchild, key); return♼ //数组d中有n个数据,tree 为二叉排序树根 BiTree* CreateBiTree(BiTree *tree, int ❝❝], d[ n){ 对于 (int i =♝ n; i++) ?将来会影响删除树其他部分的结构时,请考虑以下情况: a) 删除的节点是叶子节点; b) 删除的注释只有左子树; c )删除的节点只有右子树 d)删除的节点既有左子树又有右子树。 参考代码如下: 状态删除BST(BiTree *T,int key){ { (!*T) { if (key== if (键=- >data) ❝ 键等于键 */ else (keydata) return 删除BST(&( *T)->lchild ,key); |
; .*/ 状态删除(BiTree *p){ BiTree q,s; ♼ ♼>(❀) child==NULL) / * 如果右子树为空,只需重新连接其左子树即可(要删除的节点如果是叶子,也会走这个分支) */ { q= *p; *p =(*p)->lchild; 免费(q);}否则 ((*p)- >lchild==NULL) { q=*p; *p=(*p)->rchild; free(q); /*左边的和子树都不是空的 {q=*p; s=(*p)->lchild; while(s->rchild) } (*p)->data=s->data; if♼❀(q! * p) 其他q->lchild=s->lchild; free(r); 是转 TRUE;} |
|
|
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。