Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

回答为什么定义为 3 倍的 X ,而不是n个叶子节点的总结点数为2n原因

Posted by xuhanqiu at 2008-11-11 11:49:26 on Problem 2352 and last updated at 2008-11-11 11:51:40
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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator