前面介绍有有序数组和链表,有序数组可以根据下标,查询很快,但是插入和删除效率低,平均要移动N/2次,很是费时。而链表添加删除快,但是查询很慢需要一个一个找。于是树结构就来了,它具备有数组查询快的优点,也具有链表增删快的优点。
树
树(tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合。
二叉树
二叉树:树的每个节点最多有两个节点。
二叉搜索树:若它的左子树不为空,则左子树的所有节点的值均小于根节点的值,若它的的右子树不为空,则右子树的所有节点的值均大于它的根节点的值。
查找节点:
1:查找值比当前节点值大,则搜索右子树
2:查找值等于当前节点值,停止搜索(终止条件)
3:查找值小于当前节点值,则搜索左子树
插入节点
要插入节点,必须先找到插入的位置,与查找操作相似,由于二叉搜索树的特殊性,待插入的节点也需要从根节点开始进行比较,小于根节点则于根节点左子树比较,反之则与右子树比较,直到左子树或右子树为空,则插入到相应为空的位置,在比较的过程中要注意保存父节点的信息及待插入的位置是父节点的左子树还是右子树,才能插入到正确的位置。
遍历树
遍历树是根据一种特定的顺序访问树的每一个节点,比较常用的有前序遍历,中序遍历和后序遍历。而二叉搜索树最常用的是中序遍历。