二叉树
二叉搜索树
定义
二叉搜索树,也称有序二叉树,排序二叉树,是指一棵空树或者具有下列性质的二叉树:
若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
任意节点的左、右子树也分别为二叉查找树。
没有键值相等的节点。
二叉树的存储
定义结构体,以链式来存储二叉树
struct BSTree
{
int key; //记录键值
BSTree *left,*right,*parent;
};
插入
bool insert(int value)
{
/*初始化*/
BSTree *node = new BSTree;
node -> key = value;
node -> left = NULL;
node -> right = NULL;
if(root == NULL) //如果树为空,则node作为根
{
node -> parent = NULL;
root = node;
return true;
}
BSTree *cur,*pre; //记录当前节点和上一节点
cur = root;
pre = NULL;
while(cur != NULL)
{
if(value > cur -> key)
{
pre = cur;
cur = cur -> right;
}
else if(value < cur -> key)
{
pre = cur;
cur = cur -> left;
}
else return false; //如果树中已有此键值,插入失败
}
node -> parent = pre;
if(value > pre -> key) pre -> right = node;
else pre -> left = node;
return true;
}
查找
两种查找方法
1.迭代查找
BSTree *find(int value)
{
BSTree *cur = root;
while(cur)
{
if(node -> key < value)
{
cur = cur -> right;
}
else if(node -> key > value)
{
cur = cur -> right;
}
else return cur;
}
return NULL;
}