前面我们在讲述树之前,为大家介绍了二分查找这一个重要的算法。我们知道,二分查找适合对固定不变的数据进行查找,那如果要去查询的数据是不断变化的呢?
我们知道,链表这种数据结构可以灵活的插入和删除数据,所以动态数据的存储适合采用链表这种数据结构;有序数组可以使用二分查找算法来高效地实现数据查找;那么将链表插入、删除的灵活性以及有序数组查找的高效性结合起来就产生了二叉查找树这种数据结构,二叉查找树以及伴随其产生的各种算法是计算机科学最重要的内容之一。
二叉查找树具有以下属性:
- 节点的左子树仅包含小于该节点的其他节点。
- 节点的右子树仅包含大于该节点的其他节点。
- 节点的左,右子树都必须是二叉查找树。
1. 二叉查找树的插入
如果查找二叉树为空,那么直接将待插入元素作为查找二叉树的根节点;如果要插入的元素已经存在,则不再进行插入。
二叉树的查找操作图示如下:
二叉查找树的插入操作的代码实现为:
class BinarySearchTree
{
class Node
{
int key;
Node left, right;
public