100分来一次树的存储结构的讨论

一码超神 2012-11-06 06:02:21
树形结构用途多,但具体应用时往往会采用不同的表示法,课本里笼统地概括
双亲表示法对于树的操作集合中寻找双亲结点的操作实现很方便,
孩子表示法对于树的操作集合中寻找一格结点的孩子节点操作很方便,
双亲孩子表示法存储结构。。。
孩子兄弟表示法。。。。
是否还有其他方式的表示法呢??每种表示法的不同实现会有哪些差异呢(如:内存消耗,时间复杂度。。。)

我是一个新手,各位看官请指教,如果可以附上代码和代码说明那就更好了。
...全文
247 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sduxiaoxiang 2012-11-09
  • 打赏
  • 举报
回复
内存树 不难 不涉及存储 好实现
冰与火 2012-11-08
  • 打赏
  • 举报
回复
引用 5 楼 giantchen547792075 的回复:
引用 4 楼 Liu_peiqi 的回复:树的存储方式不一定是链表,也可以是数组。比如在堆排序中用到的树就是数组存储,这样找到第i节点的根和子都很方便,也不用指针。优势就是节省空间,操作快捷。而用链表实现的树一般说来有三个指针,即一个指向根,一个指向子,一个指向兄弟或子。对于一个二叉树,两个指针指向相应的子节点就比较方便,遍历的速度也快。而一个不确定子节点数目的树则要一个……
根据不同情况对不同数据做不同处理。数据结构也是有空间花销的,所以应用什么,不用什么,都要权衡考虑
一码超神 2012-11-07
  • 打赏
  • 举报
回复
引用 4 楼 Liu_peiqi 的回复:
树的存储方式不一定是链表,也可以是数组。比如在堆排序中用到的树就是数组存储,这样找到第i节点的根和子都很方便,也不用指针。优势就是节省空间,操作快捷。而用链表实现的树一般说来有三个指针,即一个指向根,一个指向子,一个指向兄弟或子。对于一个二叉树,两个指针指向相应的子节点就比较方便,遍历的速度也快。而一个不确定子节点数目的树则要一个指针指向左孩子,一个指针指向有兄弟。这样,……
也就是说绝大多数情况下,我们还是要针对同一份数据根据不同情况作不同的存取结构处理
冰与火 2012-11-07
  • 打赏
  • 举报
回复
树的存储方式不一定是链表,也可以是数组。比如在堆排序中用到的树就是数组存储,这样找到第i节点的根和子都很方便,也不用指针。优势就是节省空间,操作快捷。而用链表实现的树一般说来有三个指针,即一个指向根,一个指向子,一个指向兄弟或子。对于一个二叉树,两个指针指向相应的子节点就比较方便,遍历的速度也快。而一个不确定子节点数目的树则要一个指针指向左孩子,一个指针指向有兄弟。这样,不管有多少兄弟,每个节点也只需三个指针来完成,节省了大量空间。缺点自然也就是慢了。 其实效率这个东西很不确定,没有说哪种最好,万般适用的。这个要具体情况具体分析,比如你现在最主要的问题就是最大限度内提升算法速度,那么你可能就要选择内存花销大,但速度快的存储格式。如果你的内存有限制,那么你只能选择在限制之内的存储方式了。
wood87654321 2012-11-07
  • 打赏
  • 举报
回复
通常带双向指针的结点结构就可以适应绝大多数检索应用了
一码超神 2012-11-06
  • 打赏
  • 举报
回复
我们希望操作树中的结点就怎么样去设置结点的结构,并使用相应的表示方法,这个过程是这样的吧?? 我就是在想我们是不是可以有一个更通用一点的,更宽松一点的结构,任你什么样的目的,这个结构、表示方法也可以适用,这样是不是可以减少在开发的时候的工作量??比如构造不同情况下的结构,或者对同一个数据要采取不同的表达方式是不是会消耗一些时间呢??
dpdp_2012 2012-11-06
  • 打赏
  • 举报
回复
看来楼主领会还不够。用什么存储结构取决于你所要做的操作是方便的。 如赫夫曼树,知道叶子节点生成其他节点,设一个parent下表就可以了 如完全二叉树,用顺序存储就能很方便找到孩子 如并查集,要做的操作也是各自根节点合并,设个parent也很方便

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧