数组顺序存储二叉树

  1. 云栖社区>
  2. 博客>
  3. 正文

数组顺序存储二叉树

神巧合 2016-08-28 13:58:00 浏览923
展开阅读全文

1.完全二叉树


    完全二叉树由于其结构上的特点,通常采用顺序存储方式存储。一棵有n个结点的完全二叉树的所有结点从1到n编号,就得到结点的一个线性系列。

    如下图:完全二叉树除最下面一层外,各层都被结点充满了,每一层结点的个数恰好是上一层结点个数的2倍,因此通过一个结点的编号就可以推知它的双亲结点及左,右孩子结点的编号:

当 2i ≤ n 时,结点 i 的左孩子是 2i,否则结点i没有左孩子;

② 当 2i+1 ≤ n 时,结点i的右孩子是 2i+1,否则结点i没有右孩子;

③ 当 i ≠ 1 时,结点i的双亲是结点 i/2;

wKioL1VxFQexJ6rQAADyoOXy9yc156.gif


注意:由于数组下标从0开始,用数组模拟二叉树(当然也包括堆)的话,如果根节点的下标为0的话,则对于每个结点i,其左孩子下标为2*i+1;其右孩子下标为2*i+2。


2.一般二叉树


    对于一般的二叉树,如果仍按照从上至下,从左到右的顺序将树中的结点顺序存储在一维数组中,则数组元素下标之间的关系不能够反映二叉树中结点之间的逻辑关系。

    这时假设将一般二叉树进行改造,增添一些并不存在的空结点,使之成为一棵完全二叉树的形式,然后再用一维数组顺序存储。在二叉树中假设增添的结点在数组中所对应的元素值为"空"用^表示。

wKiom1VxE9ay_VjbAADLEAsJrFA338.gif



参考博文:

http://tech.ddvip.com/2014-05/1400680475210602.html

 

本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1658816

网友评论

登录后评论
0/500
评论
神巧合
+ 关注