论二叉树的存储结构

作者在 2007-11-07 07:10:00 发布以下内容

  我们都大四了,今年才开了一下高等编程(也就是程序员教程那本书,但我已经是软件设计师了),这也怪不得什么,中国的教育嘛!更源于这些年大学毕业就业难的问题吧,也可怜天下老师心啊!

  还是进入正题吧.其实虽然我是软件设计师,但我对一些算法还是很感兴趣的,所以程序员这门课我还是认真听了的.在二的时候我们学了数据结构(呵呵,也许就得笑了吧,大二就行了^.^),其实这真的没有什么,之所以很多大学生找不到理想工作也可源于此吧(我也不例外)!

  老师和书上面都说一般情况下,我们对二叉树使用链式存储结构比较存储空间,但今天我测试了下,也许我的测试有错,还请大家指点.假如有如下一个二叉树的链式存储结构体:

  typedef struct BitNode
  {
       int data;
       struct BitNode *Rchild,*Rchild;
  }BitNode;

  我想当你用printf("%d\n",sizeof(BitNode));后,结果肯定是"6"吧,这是不容怀疑的吧.那就对了,假如有如下这样一个二叉树

  1.深度为3;

  2.结点数为3;

  3.全为左单支树(即结果全是右孩子).

  那么按着上面的结构体,这颗树至少须空间大小为:结点数× 结点大小 =3*6=18(byte).

  反过来,如果我们用顺序存储这颗树要多大空间呢,我们来算算吧.一个结点只有一个数据没有什么所谓的指针域,所以每个节点占用空间:2byte,同理深度为3可知,按顺序存储的话则共要空间数为:(2^3)*2=16(byte) 

  显然,一比较我们就可以得出:在一定情况下按顺序存储二叉树比按链式存储二叉树更节约空间.至于我的理解有没有错,能不能找出一个公理我还得想想!也请各位高手来指正我的想法,谢谢!

java算法设计 | 阅读 3145 次
文章评论,共1条
mapoor
2008-04-08 20:48
1
有道理。

实际情况中 还是 链式 方便
游客请输入验证码
浏览252402次