Sift Down.
124{
127 int left=parent*2+1;
128 int right = left +1;
129 void *tmp;
130 int swap=parent;
131 double leftarea=0;
132 double rightarea=0;
133
134 double parentarea=((
areanode*) treearray[parent])->
area;
135
136 if(left<tree->usedSize)
137 {
138 leftarea=((
areanode*) treearray[left])->area;
139 if(parentarea>leftarea)
140 swap=left;
141 }
142 if(right<tree->usedSize)
143 {
144 rightarea=((
areanode*) treearray[right])->area;
145 if(rightarea<parentarea&&rightarea<leftarea)
146 swap=right;
147 }
148 if(swap>parent)
149 {
150
151 tmp=treearray[parent];
152 treearray[parent]=treearray[swap];
153
155 treearray[swap]=tmp;
156
158 if(swap<tree->usedSize)
159 down(tree,arealist,swap);
160 }
161 return;
162}
static void down(MINHEAP *tree, areanode *arealist, int parent)
Sift Down.
#define LWDEBUG(level, msg)
This structure is placed in an array with one member per point.