初次尝试使用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)
}
}