二叉排序樹C++構造
阿新 • • 發佈:2019-02-11
初次嘗試使用C++來構造二叉排序樹
定義:
二叉排序樹或者是一顆空樹,或者是具有以下性質的樹
1.左子樹(如果存在)上的所有節點的關鍵字都小於根節點的關鍵字
2.右子樹(如果存在)上的所有節點的關鍵字都大於根節點的關鍵字
3.左子樹和右子樹也是二叉排序樹
構造:
首先構造節點
class node
{
public:
int data;
node *left,*right;
node(void){ data = NULL, left = NULL, right = NULL; }
node(int Data){ data = Data, left = NULL, right = NULL; }
~node(void);
};
構造二叉樹
class CBTree
{
public:
int maxnum,num;
node root;
CBTree(void);
~CBTree(void);
void NodeAdd(node *&Root,node *Data);
bool NodeSearch(node* Root,int Data);
};
CBTree::CBTree(void)
{
maxnum=100;
num=0;
root=NULL;
}
CBTree::~CBTree(void )
{
//析構
}
這樣一棵簡單的二叉樹的基本結構就搞定了,不過要成為具體的二叉
排序樹就需要在節點插入的時候些處理了。
節點插入:
void CBTree::NodeAdd(node* &Node,node* NodeData)
{
if(num==maxnum)
{
cout<<"full"<<endl;
return;
}
if(num==0)
{
*Node=*NodeData;
num++;
}
else
{
if (Node==NULL)
{
Node=NodeData;
num++;
}
else if(Node->data>NodeData->data)
NodeAdd(Node->left,NodeData);
else
NodeAdd(Node->right,NodeData);
}
}
節點查詢:
bool CBTree::NodeSearch(node* Node,int Data)
{
if(num==0)
{
return false;
}
if(Node)
{
if(Node->data==Data)
{
return true;
}
else if(Node->data>Data)
{
return NodeSearch(Node->left,Data);
}
else
{
return NodeSearch(Node->right,Data);
}
}
else
{
return false;
}
}
構造一棵二叉排序樹:
void main()
{
int i,a;
CBTree Btree;
node *Node,*Root=&Btree.root;
for(i=0;i<10;i++)
{
cin>>a;
while(Btree.NodeSearchRoot, a))
{
cout << "已存在,請重新輸入" << endl;
cin >> a;
}
Node=new node(a);
Btree.NodeAdd(Root,Node)
}
}