二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
查询二叉搜索树:
递归的:
tree_search(x,k)
if(x==NULL || k==x.key)
return x;
else
return tree_search(x.left,k)
else return tree_search(x.right,k); //O(H) h是这个树的高度
用循环的:
tree_srarch(x,k)
while(x!=NULL && X!=x.key)
{
if(k<x.key)
x=x.left
else
x=x.right;
}
teturn x;
插入:
(思想,用两个指针,因为最后要找到插入节点的双亲。)
算法分析:
要将一个新值V插入到一颗二叉搜索树T中,需要调用过程tree_insert,该过程以节点z作为输入,其中z.key=v;
z.left=NULL,z.right=NULL,,,,,,这个过程要修改T和z的某些属性,来把z插入到树中的相应位置上
tree_insert(T,x)
y=NULL //y 是一个节点
x=T.root
while(x!=NULL)
y=x;
if(z.key<x.key)
x=x.left;
else
x=x.right;
z.p=y;
if(y==NULL)
T.root==z //空树
else if (z.key<y.key)
y.left=z;
else
y.right=z;
</