double Nonleaf::Occupancy(Stat *Stats) const {
	int leafsize, nonleafsize;
#ifdef RECTANGLE
	leafsize=(Stats->PageSize-2*sizeof(int))/
		 (sizeof(int)+sizeof(double)*(3*Stats->Dimension+1));
#else 
	leafsize=(Stats->PageSize-2*sizeof(int))/
		 (sizeof(int)+sizeof(double)*(Stats->Dimension+1));
#endif
	nonleafsize=MaxSize(Stats);
	return NumEntry()/(1.0*nonleafsize*NonleafNum()+1.0*leafsize*LeafNum());
}
Example #2
0
void Test1(){
	int arr[] = {1,2,4,'#','#',7,'#','#',3,5,'#','#',6,'#',8};	
	Node_p root = CreateBinaryTree(arr,sizeof(arr)/sizeof(*arr),'#');
	cout<<"前序遍历:"<<endl;
	PrevOrder(root);
	PrevOrderNonR(root);
	cout<<endl;

	cout<<"中序遍历:"<<endl;
	InOrder(root);
	InOrderNonR(root);
	cout<<endl;
	
	cout<<"后序遍历:"<<endl;
	PostOrder(root);
	PostOrderNonR(root);
	cout<<endl;

	cout<<"层序遍历:"<<endl;
	LevelOrder(root);
	cout<<endl;
	int depth = Depth(root);
	cout<<"该树的高度为:"<<depth<<endl;
	cout<<"该树共有"<<LeafNum(root)<<"个叶子节点"<<endl;
	for(int i=1; i<=depth; ++i){
		cout<<"该树第"<<i<<"层有"<<GetKNode(root,i)<<"个节点"<<endl;
	}
	Node_p node1 = FindNode(root,4);
	Node_p node2 = FindNode(root,7);
	Node_p ancestor = GetCommonAncestor(root,node1,node2,1);
	cout<<node1->val<<"和"<<node2->val<<"的公共祖先为:"<<ancestor->val<<endl;
	node1 = FindNode(root,4);
	node2 = FindNode(root,5);
	ancestor = GetCommonAncestor(root,node1,node2,1);
	cout<<node1->val<<"和"<<node2->val<<"的公共祖先为:"<<ancestor->val<<endl;
	node1 = FindNode(root,5);
	node2 = FindNode(root,8);
	ancestor = GetCommonAncestor(root,node1,node2,1);
	cout<<node1->val<<"和"<<node2->val<<"的公共祖先为:"<<ancestor->val<<endl;
	
}
void Node::Print_Summary(Stat *Stats, std::ofstream &fo) const 
{
Entry tmpent;
tmpent.Init(entry[0].sx.dim);
CF(tmpent);
fo<<"Root CF\t"<<tmpent<<std::endl;
fo<<"FootPrint\t"<<sqrt(tmpent.Radius())<<std::endl;

#ifdef RECTANGLE
Rectangle tmprect;
tmprect.Init(entry[0].sx.dim);
Rect(tmprect);
fo<<"Root Rectangle\t"<<tmprect<<std::endl;
#endif RECTANGLE

fo<<"Leaf Nodes\t"<<LeafNum()<<std::endl;
fo<<"Nonleaf Nodes\t"<<NonleafNum()<<std::endl;
fo<<"Tree Size\t"<<Size()<<std::endl;
fo<<"Tree Depth\t"<<Depth()<<std::endl;

fo<<"Leaf Entries\t"<<NumLeafEntry()<<std::endl;
fo<<"Nonleaf Entries\t"<<NumNonleafEntry()<<std::endl;
fo<<"Occupancy\t"<<Occupancy(Stats)<<std::endl;
}