您的位置:首页 > 其它

文章标题

2015-08-22 16:22 239 查看

二叉查找树实现

性质

二叉查找树(BinarySearch Tree,也叫二叉搜索树,或称二叉排序树Binary Sort Tree)或者是一棵空树,或者是具有下列性质的二叉树:

(1)、若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值;

(2)、若它的右子树不为空,则右子树上所有结点的值均大于它的根结点的值;

(3)、它的左、右子树也分别为二叉查找树


插入

在二叉查找树中插入新结点,要保证插入新结点后仍能满足二叉查找树的性质。例子中的插入过程如下:

a、若二叉查找树root为空,则使新结点为根;

b、若二叉查找树root不为空,则通过Insert函数寻找插入点并返回它的地址(若新结点中的关键字已经存在,则返回空指针);
c、若新结点的关键字小于插入点的关键字,则将新结点插入到插入点的左子树中,大于则插入到插入点的右子树中。


删除

删除某个结点后依然要保持二叉查找树的特性。例子中的删除过程如下:
a、若删除点是叶子结点,则设置其双亲结点的指针为空。
b、若删除点只有左子树,或只有右子树,则设置其双亲结点的指针指向左子树或右子树。
c、若删除点的左右子树均不为空,则:
1)、查询删除点的右子树的左子树是否为空,若为空,则把删除点的左子树设为删除点的右子树的左子树。
2)、若不为空,则继续查询左子树,直到找到最底层的左子树为止。
待实现


代码

#include <iostream>

using namespace std;

class Node
{
public:
int value;
Node *left;
Node *right;

Node(){left = right = NULL;}
};

class BinSearchTree
{
private:
Node *root;

public:
BinSearchTree(){this->root = NULL;}
Node* Find(int value, Node* root)
{
if(root == NULL)
{
return NULL;
}
if (value < root->value)
{
Find(value,root->left);
}
else if(value > root->value)
{
Find(value,root->right);
}
else
{
return root;
}
}
void Insert(Node *&root,Node*p) //此处需要使用二级指针/指针引用
{
if(root == NULL)
{
root = p;
cout <<"root = NULL" <<endl;
}
if(p->value > root->value)
{
Insert(root->right,p);
}
else if(p->value < root->value)
{
Insert(root->left,p);
}
}
void Delete(int value, Node *root)
{
}

void PreOrder(Node *root)
{
if(root == NULL) return;
else
{
cout <<root->value<< " ";
PreOrder(root->left);
PreOrder(root->right);
}
}

void MiddleOrder(Node *root)
{
if(root == NULL) return;
else
{
MiddleOrder(root->left);
cout << root->value <<" ";
MiddleOrder(root->right);
}
}
void PostOrder(Node *root)
{
if(root == NULL) return;
else
{
PostOrder(root->left);
PostOrder(root->right);
cout << root->value <<" ";
}
}

void Print()
{
cout <<"前序遍历"<<endl;
PreOrder(this->root);
cout <<"中序遍历"<<endl;
MiddleOrder(this->root);
cout <<"后续遍历" <<endl;
PostOrder(this->root);
}
void CreateBst(int a[],int n)
{
for(int i = 0; i < n; i++)
{
Node *p = new Node();
p->value= a[i];
Insert(root,p);
}
}
};

int main()
{
BinSearchTree bt;
int num;
cout << "请输入二叉排序树个数:";
cin >>num;
int b[num];
for(int i =0; i < num; i++)
{
cin >> b[i];
}
bt.CreateBst(b,num);
bt.Print();

cout << "Hello world!" << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: