⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 btree.hpp

📁 一个简单的b tree 实现代码
💻 HPP
字号:
#define M 2
/* B 树的阶,即非根节点中键的最小数目。 
* 有些人把阶定义为非根节点中子树的最大数目。 
*/


#include <string>
  using namespace std;
//#define key_string 1
#ifdef key_string
typedef string typekey;


#else
typedef long int typekey;
#endif

typedef struct btnode {    /* B-Tree 节点 */
    int d;    /* 节点中键的数目 */ 
	typekey k[2*M+1];    /* 键 */
	typekey min;
	char *v[2*M+1];    /* 值 */
	struct btnode *p[2*M+1];    /* 指向子树的指针 */
} node, *btree;
/*
* 每个键的左子树中的所有的键都小于这个键,
* 每个键的右子树中的所有的键都大于等于这个键。 
* 叶子节点中的每个键都没有子树。 
*/ 

/* 当 M 等于 1 时也称为 2-3 树 
*    +----+----+
*    | k0 | k1 |                     
*  +-+----+----+--- 
*  | p0 | p1 | p2 | 
*  +----+----+----+
*/ 


class   tree 
{
	private: 
	 
	  	
 		  char *InsValue; /* 与要插的键相对应的值 */ 
 		  
 		  int btree_disp; /* 查找时找到的键在节点中的位置 */  
			 int flag; /* 节点增减标志 */ 
			 int btree_level  ; /* 多路树的高度 */ 
			 int btree_count  ; /* 多路树的键总数 */ 
			 int node_sum  ;  /* 多路树的节点总数 */ 
			 int level; /* 当前访问的节点所处的高度 */ 
			 btree NewTree; /* 在节点分割的时候指向新建的节点 */ 
			 typekey InsKey; /* 要插入的键 */ 
 		     typekey pop_key;
 		  
			int print_tree(btree t, int);


  public:
	    		tree();
			~tree(); 
				btree root;

	  btree search(typekey, btree,int*);
			btree insert(typekey,btree);
			btree insert(typekey,btree,char*);
			btree delete_n(typekey,btree);
			int height(btree);
			int count( );
			double payload(btree);
			btree deltree(btree);

			  void InternalInsert(typekey, btree);
			  btree InternalInsert(typekey, btree,char*,int);
			  void InsInNode(btree, int);
			   void InsInLeafNode(typekey, char*,btree, int);
			   void InsInIndexNode( btree,btree, int);


			  btree	SplitLeafNode(typekey key,char*,btree nt,btree t, int d ) ;
			  btree	SplitNode(typekey key,char*,btree nt,btree t, int d ) ;
			  btree NewRoot(btree);
			 btree NewRoot(btree,btree);
			  void InternalDelete(typekey, btree,int);
			  void InternalDelete1(typekey, btree,int);
			  /*void JoinNode(btree, int);
			  void MoveLeftNode(btree t, int);
			  void MoveRightNode(btree t, int);*/
			  float use_rate(btree );
			  void DelFromNode(btree t, int);
			  btree MergeNode(btree t1,btree t2,int);
			  btree MergeLeafNode(btree t1,btree t2,int,int);
			  btree MergeLeafNodeBack(btree t1,btree t2,int,int);
			  btree FreeRoot(btree);
				int print();
			  btree delall(btree,int);
			  void Error(int,typekey);

			  btree RebuildIndexNode(btree t) ;
	  	
	  	
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -