二叉树,二叉排序树

一、二叉树的顺序存储表示
     利用满二叉树的特性,在线性表中存储数节点;因此可以利用节点的编号(从左到右,按层标记,根节点标记为0)作为数组的下标,且父节点(p)和子节点(c)下标存在如下关系:p=(c-1)/2;c1=2*p+1;c2=2*p+2。
     缺点:如果数是一棵稀疏的树,那么会浪费大量存储空间。

二、二叉树的链表存储表示
     三叉链表结构中每个树节点有一个指向父节点的指针,有一个指向左子孩子节点的指针,一个指向右子孩子节点的指针。

三、二叉树遍历
     如果L-D-R分别表示访问左子树,访问根,访问右子树,那么遍历树的三种顺序是:前序遍历(D-L-R)、中序遍历(L-D-R)、后序遍历(L-R-D)。
     中序遍历二叉搜索树能以递增的顺序遍历树的所有值。

四、排序二叉树
     排序二叉树具有以下性质:
  1. 若任意节点的左子树不为空,则左子树上任一节点的键值都比节点的键值小;
  2. 若任意节点的右子树不为空,则右子树上任一节点的键值都比节点的键值大;
  3. 任意节点的左、右子树都是排序二叉树;
  4. 排序二叉树没有键值相等的节点;
     构建一棵排序二叉树的过程就是一个排序过程。排序二叉树的搜索、删除、插入的复杂度等于树高(log 2 N)。

     二叉搜索树T中查找x(即排序树)的算法:
  1. 若T是空树,返回失败,否则;
  2. 若x等于根节点键值,返回根节点,否则;
  3. 若x小于根节点的键值,在T的左子树中查找x,否则;
  4. 在T的右子树中查找x;
     二叉搜索树T新增节点N的算法:
  1. 若T是一棵空树,根节点指针(引用)指向节点N,N成树的根节点,否则;
  2. 若N的键值等于根节点的键值,返回失败,否则;
  3. 若N的键值小于根节点的键值,将N节点新增到左子树上,否则;
  4. 把N新增到右子树上;     
     二叉搜索树T删除一个节点K的算法(指向K的指针假设为*p):
  1. 如果K是叶子节点,直接删除K(*p置为null);
  2. 如果K只有一个子树,当K是父节点的左子节点时,把K的子树挂到K的父节点的左子树上;当K是父节点的右子节点时,把K的子树挂到K的父节点的右子树上;
  3. 如果K有两棵子树,那么合并K的两棵子树形成新的排序树T1,最后将指向K的指针(引用)指向T1的根节点,删除完成;合并K的子树的过程就是把左子树挂到右子树的最小叶子节点(最左边的叶子节点)的左子树上。
     构造一棵排序二叉树的过程就是一个排序过程,最差时间复杂度是n平方。使用二叉排序树CPU cache的性能较差,堆排序的CPU cache性能较好。另外,排序二叉树是性能最好的增量排序算法。

五、红黑树
     红黑树是一种自平衡二叉排序树。好处:红黑树对搜索、删除、新增操作的时间复杂度提供最好可能的最差情况担保。红黑树的持久版本每次新增或是删除操作需要logn的时间复杂度和logn的空间。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值