100分来一次树的存储结构的讨论
树形结构用途多,但具体应用时往往会采用不同的表示法,课本里笼统地概括
双亲表示法对于树的操作集合中寻找双亲结点的操作实现很方便,
孩子表示法对于树的操作集合中寻找一格结点的孩子节点操作很方便,
双亲孩子表示法存储结构。。。
孩子兄弟表示法。。。。
是否还有其他方式的表示法呢??每种表示法的不同实现会有哪些差异呢(如:内存消耗,时间复杂度。。。)
我是一个新手,各位看官请指教,如果可以附上代码和代码说明那就更好了。
[解决办法]
看来楼主领会还不够。用什么存储结构取决于你所要做的操作是方便的。
如赫夫曼树,知道叶子节点生成其他节点,设一个parent下表就可以了
如完全二叉树,用顺序存储就能很方便找到孩子
如并查集,要做的操作也是各自根节点合并,设个parent也很方便
[解决办法]
树的存储方式不一定是链表,也可以是数组。比如在堆排序中用到的树就是数组存储,这样找到第i节点的根和子都很方便,也不用指针。优势就是节省空间,操作快捷。而用链表实现的树一般说来有三个指针,即一个指向根,一个指向子,一个指向兄弟或子。对于一个二叉树,两个指针指向相应的子节点就比较方便,遍历的速度也快。而一个不确定子节点数目的树则要一个指针指向左孩子,一个指针指向有兄弟。这样,不管有多少兄弟,每个节点也只需三个指针来完成,节省了大量空间。缺点自然也就是慢了。
其实效率这个东西很不确定,没有说哪种最好,万般适用的。这个要具体情况具体分析,比如你现在最主要的问题就是最大限度内提升算法速度,那么你可能就要选择内存花销大,但速度快的存储格式。如果你的内存有限制,那么你只能选择在限制之内的存储方式了。
[解决办法]