B-tree的构造及相关操作

来源:互联网 发布:mac os pkg 安装u盘 编辑:程序博客网 时间:2024/05/19 03:45
#include "bttool.h"int main(){   ElemType data;   treeNode* root;   treeNode* treenode;   root = new treeNode;   treenode = new treeNode;   cin>>data;   treenode = creatbtree(root,data);   root = treenode;   while(1)   {       cin>>data;       if(data==0)       {           break;       }       treenode = creatbtree(root,data);   }/*  cout<<"print  preorderbtree:\n";  preorderbtree(root);  cout<<endl;*//*  cout<<"print inorderbtree:\n";  inorderbtree(root);  cout<<endl;*/////cout<<"print postorderbtree:\n";//postorderbtree(root);//cout<<endl;///*//add  tree node//preorderbtree(root);cout<<"\nadd one node:\n";ElemType adddata;cin>>newdata;//treenode = creatbtree(root,adddata);//treeNode* newtreeroot;addtreenode(root,newdata);cout<<"\nthe new b tree:\n";//preorderbtree(newtreeroot);inorderbtree(root);cout<<endl;*//*//find datacout<<"input the number:\n";ElemType finddata;treeNode* findpnode;findpnode = new treeNode;cin>>finddata;findpnode=findnode(root,finddata);if(findpnode!=NULL){    cout<<findpnode->data<<" is  find.\n";}else{    cout<<finddata<<"is not exist.\n";}delete findpnode;*///count the nunber of leaves nodeint  leavesnum;leavesnum = findleavesnode(root);cout<<"the number of leaves  is: "<<leavesnum;cout<<endl;/*//calculate deepthint dptree;dptree = calculatedeep(root);cout<<"the deepth of the tree is: "<<dptree;cout<<endl;*/  return 0;}
#ifndef _CREAT_B_TREE_#define _CREAT_B_TREE_#include<iostream>#include<stdio.h>#include<stdlib.h>#include<algorithm>using namespace std;typedef int ElemType;struct treeNode{    ElemType data;    treeNode *tleft;    treeNode *tright;};treeNode* creatbtree(treeNode* root,ElemType data);void preorderbtree(treeNode* root);void inorderbtree(treeNode* root);void postorderbtree(treeNode* root);void addtreenode(treeNode* root,ElemType data);treeNode* findnode(treeNode* root,ElemType data);int findleavesnode(treeNode* root);int calculatedeep(treeNode* root); void clearbtree(treeNode* root);#endif // _CREAT_B_TREE_


#include "bttool.h"treeNode* creatbtree(treeNode* root,ElemType data){    treeNode* newnode;    newnode = new treeNode;    newnode->data = data;    newnode->tleft = NULL;    newnode->tright = NULL;    if(root == NULL)    {        root = newnode;    }    else    {        treeNode* backnode = NULL;        treeNode* currentnode = root;        while(currentnode!=NULL)        {            backnode = currentnode;            if(currentnode->data>data)            {                currentnode = currentnode->tleft;            }            else if(currentnode->data<data)            {                currentnode = currentnode->tright;            }            else                delete newnode;        }        if(backnode->data>data)        {            backnode->tleft = newnode;        }        else        {            backnode->tright = newnode;        }        return root;    }}void preorderbtree(treeNode* root){    treeNode* treenode;    treenode = new treeNode;    treenode = root;    if(treenode == NULL)    {        return;    }    else    {        cout<<treenode->data<<"\t";        preorderbtree(treenode->tleft);        preorderbtree(treenode->tright);    }    delete treenode;}void inorderbtree(treeNode* root){    treeNode* treenode;    treenode = new treeNode;    treenode = root;    if(treenode == NULL)    {        return ;    }    else    {        inorderbtree(treenode->tleft);        cout<<treenode->data<<"\t";        inorderbtree(treenode->tright);    }    delete treenode;}void postorderbtree(treeNode* root){    treeNode* treenode;    treenode = new treeNode;    treenode = root;    if(treenode==NULL)    {        return ;    }    else    {        postorderbtree(treenode->tleft);        postorderbtree(treenode->tright);        cout<<treenode->data<<"\t";    }    delete treenode;}void addtreenode(treeNode* root,ElemType data){    treeNode* newnode;    newnode = new treeNode;    newnode->data=data;    newnode->tleft=NULL;    newnode->tright=NULL;    if(root == NULL)    {        root = newnode;        delete newnode;        return ;    }    else    {        treeNode* currentnode = root;        treeNode* backnode = NULL;        while(currentnode!=NULL)        {            backnode = currentnode;           if(currentnode->data > data)           {               currentnode = currentnode->tleft;           }           else if(currentnode->data < data)           {               currentnode = currentnode->tright;           }           else           {               //cout<<"this node is exist!!!\n";               delete newnode;           }        }        if(backnode->data > data)        {            backnode->tleft = newnode;            cout<<"done\n";        }        else        {            backnode->tright = newnode;            cout<<"done\n";        }        return ;    }}treeNode* findnode(treeNode* root,ElemType data){    treeNode* pnode;    pnode = new treeNode;    pnode = root;    if(pnode == NULL)    {        return NULL;    }    else    {        if(pnode->data==data)            return pnode;        else        {            if(pnode->data>data)                return findnode(pnode->tleft,data);            else                return findnode(pnode->tright,data);            return NULL;        }    }    delete pnode;}int findleavesnode(treeNode* root){    static int node_count=0;    treeNode* pnode;    pnode = new treeNode;    pnode = root;    if(pnode == NULL)    {        return node_count;    }    else    {        if(pnode->tleft == NULL &&  pnode->tright == NULL)        {            cout<<pnode->data<<endl;            node_count++;        }        else        {            findleavesnode(pnode->tleft);             findleavesnode(pnode->tright);        }        return node_count;    }} int calculatedeep(treeNode* root) {     treeNode* pnode;     pnode = new treeNode;     pnode = root;     int dpleft = 0;     int dpright = 0;     if(pnode == NULL)     {         return 0;     }     else     {         dpleft = calculatedeep(pnode->tleft);         dpright = calculatedeep(pnode->tright);     }     if(dpleft>dpright)     {         return ++dpleft;     }     else     {         return ++dpright;     } } void clearbtree(treeNode* root) {     if(root)     {         clearbtree(root->tleft);         clearbtree(root->tright);         delete root;     } }


0 0
原创粉丝点击