二叉搜索树(Binary Search Tree)的性质:
1、每个节点都有一个作为搜索关键码的key,并且所有节点的key都不相同。
2、左子树上的key值都小于根节点的key值。
3、右子树上的key值都大于根节点的key值。
4、左右子树都是二叉搜索树。
如下图为一颗二叉搜索树
实现:
二叉搜索树的插入:
二叉树的插入是根据要插入节点的key值找一个合适的位置插入节点,如果要插入节点的key值大于当前结点的key值,则向右树寻找合适的位置,如果要插入节点的key值小于当前结点的key值,则向左树寻找合适的位置,如果要插入的节点的key值等于当前结点的key值,则说明该节点已存在,直接返回,不进行插入。
代码实现:
bool Insert(int key)//插入-非递归
{
Node * cur = _root;
Node * parent = NULL;
while(cur)
{
if(cur->_key < key)
{
parent = cur;
cur = cur->_right;
}
else if (cur->_key > key)
{
parent = cur;
cur = cur->_left;
}
else //cur->_key==key 节点存在
{
return false;
}
}
cur = new Node(key);
if (parent == NULL)
{
_root = cur;
}
else
{
if (parent->_key > key)
{
parent->_left = cur;
}
else
{
parent->_right = cur;
}
}
return true;
}
bool InsertR(int key)//插入-递归
{
return _InsertR(_root, key);
}
bool _InsertR(Node *& root, int key)//插入-递归
{
if (root == NULL)
{
root = new Node(key);
return true;
}
else
{
if (root->_key > key)
{
return<