Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
回答为什么定义为 3 倍的 X ,而不是n个叶子节点的总结点数为2n原因In Reply To:线段树的大小为多大? Posted by:thincal at 2007-09-14 12:34:56 1.线段树的数据结构: (1)建成完全二叉树的那种形式,父子之间的关系由2*i,2*i+1这种下标定位的方式来实现 缺点:浪费了一部分空间!(如倒数第二层,只有最右边的一个结点有孩子的话) 也明白了昨天'胜者树'那题为什么一直Runtime error,也是这个原因,数组只有2*n不够。 最后一层需要的空间相当于前面所有层…… 所以用这种方法要开很大的数组 (这里3倍都是因为N比较小,层少了)。。 我做另外一题开大了6倍才行 堆---优先队列也是用的这种方式的结构,但由于堆本身就是一棵完全二叉树,所以没有浪费..长度由Q.size控制 (2)建成----开一个大数组,一个结点、一个结点挨着放在一起,但此时父子之间的关系需要拿指针,或index(整型数定位下标) 优点: 这种结构可以明确一个线段树, 只需要2n-1个结点保存 (即数组只需要开2n) 缺点: 每个结点都需要增加指针,也有浪费空间的嫌疑…… 总的来说,各有利弊吧。 自己前面两个都是用的形式1,打算以后都用法2)。 觉得它可读性与逻辑性都比较好(用指针left,right) Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator