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()); }
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; }