二叉树实现链式存储?两种存储结构的优缺点
一、怎么把二叉树的链式存储结构转化为顺序存储结构
二叉树的链式存储是指:两个儿子结点分别用指针指向。而存储结构值的是:假设该结点在数组中的位置为 i,则它的左儿子的位置为 2i,右儿子为 2i+ 1.( i从1开始)
所以你只要创建一个数组,从链式存储的根节点开始,用中序遍历遍历树,按中序遍历的顺序存储在数组中。即可完成顺序存储结构的转化。
相关的遍历你可以查看相关资料,中序遍历即访问顺序为左儿子-根-右儿子的顺序访问。
希望对你有所帮助。
二、非线性结构只能依赖链式存储实现吗
不是,该说法绝对化。非线性结构可以是顺序储存结构,也可以是链式储存结构。
非线性结构中各个数据元素不再保持在一个线性序列中,每个数据元素可能与零个或者多个其他数据元素发生联系。根据关系的不同,可分为层次结构和群结构。
常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等),图。(其中多维数组是由多个一维数组组成的,所以不再是线性结构)
顺序存储方法和链接存储方法的详细解释:
顺序存储方法它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现,由此得到的存储表示称为顺序存储结构。顺序存储结构是一种基本的存储表示方法,通常借助于程序设计语言中的数组来实现。
链接存储方法它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。由此得到的存储表示称为链式存储结构,链式存储结构通常借助于程序设计语言中的指针类型来实现。
以上内容参考:百度百科-存储结构
三、二叉树***两种存储结构的优缺点
一、顺序存储
优点:读取某个指定的节点的时候效率比较高O(0)
缺点:会浪费空间(在非完全二叉树的时候)
二、链式存储
优点:读取某个指定节点的时候效率偏低O(nlogn)
缺点:相对二叉树比较大的时候浪费空间较少
二叉树的顺序存储,寻找后代节点和祖先节点都非常方便,但对于普通的二叉树,顺序存储浪费大量的存储空间,同样也不利于节点的插入和删除。因此顺序存储一般用于存储完全二叉树。
链式存储相对顺序存储节省存储空间,插入删除节点时只需修改指针,但寻找指定节点时很不方便。不过普通的二叉树一般是用链式存储结构。
扩展资料:
性质1:二叉树的第i层上至多有2i-1(i≥1)个节点
性质2:深度为h的二叉树中至多含有2h-1个节点
性质3:若在任意一棵二叉树中,有n0个叶子节点,有n2个度为2的节点,则必有n0=n2+1
性质4:具有n个节点的完全二叉树深为log2x+1(其中x表示不大于n的大整数)
参考资料来源:百度百科-二叉树
四、二叉树有哪五种形态
二叉树的五种形态:
1、空二叉树(什么都没有,nothing)
2、只有一个根节点的二叉树(左右子树为空)
3、右子树为空的二叉树(右腿断了)
4、左子树为空的二叉树(左腿断了)
5、左右子树都非空的的二叉树(既有左子树又有右子树,)
扩展资料
二叉树的基本运算:
1、初始化
2、求双亲
3、求左孩子、求右孩子
4、建二叉树
5、先序遍历(根-左-右)
6、中序遍历(左-根-右)
7、后续遍历(左-右-根)
8、层次遍历
二叉树的的存储实现:
1、顺序存储(一维数组)
2、链式存储(二叉链表、三叉链表)