二叉排序树
1 定义
二叉排序树,又称为二叉查找树。它或者是一颗空树,或者是具有下列性质的二叉树。
(1)若它的左子树不为空,则左子树上所有结点的值都小于它的根结点的值;
(2)若它的右子树不为空,则右子树上所有结点的值都大于它的根结点的值;
(3)它的左、右子树也分别为二叉排序树。
2 二叉排序树查找操作
//二叉树的二叉链表结点结构定义 typedef struct BiTNode { int data; struct BiTNode *lchild; struct BiTNode *rchild; }BiTNode; typedef struct BiTNode *BiTree; //递归查找二叉树中是否存在key //指针f指向key的双亲,初始值为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 = f; return true; } else if (key < T->data) { SearchBST(T->lchild, key, f, p); //在左子树继续查找 } else { SearchBST(T->rchild, key, f, p); //在右子树继续查找 } }