一.搜索二叉树的性质>
1). 每个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不相同。
2). 左子树上所有节点的关键码(key)都小于根节点的关键码(key).
3). 右子树上所有节点的关键码(key)都大于根节点的关键码(key)
4). 左右子树都是二叉搜索树.
类似这样的一棵树就叫做搜索二叉树:
二.搜索二叉树的基本操作
1.插入
此时我们就需要考虑三种情况:
(1).空树的情况
(2).要插入的结点已经在搜索二叉树中
(3).要插入的结点不存在搜索二叉树中.
如果是空树则直接创建结点使指向根结点的指针指向新创建的结点;如果不是空树那仫就要找到合适的位置插入,使得插入这个新的节点之后这颗树依然是一颗搜索二叉树:如果你要插入的结点的关键码比当前结点的关键码大则在右树中找到合适的位置,反之在左树中找,如果遍历完这颗树找到相同的关键码则不用处理,如果没有再次判断父关键码和要插入结点的关键码的大小,决定新的节点是插入到左子树还是右子树上.
非递归>
bool Insert(const K& key)
{
if(_root == NULL) //空树
{
_root=new Node(key);
return true;
}
Node *cur