首页 > 编程知识 正文

实现链式存储二叉树构建,二叉树用什么数据结构存储

时间:2023-05-06 15:43:23 阅读:159555 作者:3195

文章目录序言正文总结

上一节对二叉树的顺序记忆进行了说明,通过学习可以看出,其实二叉树不适合使用数组记忆。 因为并不是所有的二叉树都是完整的二叉树,所以在普通的二叉树中,使用顺序表记忆的话往往会浪费空间。 本节学习二叉树的连锁记忆结构。

正文

图1常见二叉树示意图

如图1所示,这是普通的二叉树,将其作为链存储,从树的根节点开始,将各个节点及其左右的孩子作为链接列表存储即可。 因此,与图1对应的链存储器结构如图2所示。

图2二叉树的链式存储结构示意图

从图2可以看出,连锁性地收纳二叉树时,其节点结构由3个部分构成()

指向左侧子节点的指针(Lchild;

存储在节点上的数据(data;

指向右侧子节点的指针(Rchild );

图3二叉树的节点结构

表示此节点结构的c语言代码如下:

# definetelemtypeinttypedefstructbitnode { telemtypedata; //数据域struct BiTNode *lchild; //左儿童指针struct BiTNode *rchild; //右儿童指针(}BiTNode,*BiTree; 与图2中的链存储结构对应的c语言代码如下:

# include stdio.h # include stdlib.h # definetelemtypeinttypedefstructbitnode { telemtypedata; //数据域struct BiTNode *lchild; //左儿童指针struct BiTNode *rchild; //右儿童指针(}BiTNode,*BiTree; voidcreatebitree(bitree*t ) (t=) bitnode* ) malloc ) sizeof ) bitnode ); (t ) -数据=1; (t )-lchild=(bitnode* ) malloc (sizeof ) bitnode ); (t )-lchild-data=2; (t )-rchild=(bitnode* ) malloc (sizeof ) bitnode ); (t )-rchild-data=3; (t )-rchild-lchild=NULL; (t )-rchild-rchild=NULL; (t )-lchild-lchild=(bitnode* ) malloc ) sizeof ) bitnode ); (t )-lchild-lchild-data=4; (t )-lchild-rchild=NULL; (t )-lchild-lchild-lchild=NULL; (t )-lchild-lchild-rchild=NULL; (}int main ) ) { BiTree Tree; //用于创建结构变量createbitree(tree )的printf('%d”,Tree-lchild-lchild-data ); 返回0; }程序输出结果:

4

实际上,二叉树的连锁存储结构不仅如图2所示。 例如,在实际场景中,可能需要执行“查找节点的父节点”操作,如图4所示。 在这种情况下,可以在节点结构中添加指针字段,以便每个节点都指向父节点。

图4定制二叉树的连锁记忆结构

这种链表结构通常称为三叉链表。

此时,结构中存储父节点的指针增加了一个。

# definetelemtypeinttypedefstructbitnode { telemtypedata; //数据域struct BiTNode *lchild; //左儿童指针struct BiTNode *rchild; //右儿童指针struct BiTree *parent; //指向父母节点的指针}BiTNode,*BiTree; 利用图4所示的三叉链表,可以很容易地发现各节点的父节点。 因此,在解决实际问题时,用合适的链表结构存储二叉树可以取得更多的成果。

本文简要总结了二叉树的连锁存储结构,有错误的地方敬请指正。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。