您的位置:首页 > 其它

二叉查找树

2016-07-10 01:43 232 查看
二叉树的一个重要应用是它们在查找中的应用。为了更方便的阐述二叉查找树的概念,我们这里考虑关键字为互异整数的情形。

使二叉树成为二叉查找树的性质是,对树中的每个节点N,它的左子树的所有关键字小于N的关键字值,而又子树的所有关键字大于N的关键字值。后面我们可以看到,这种方式可以保证元素用统一的方式排序。

1. 二叉树节点声明

struct TreeNode
{
int element;
TreeNode* left;
TreeNode* right;
};
typedef struct TreeNode *PtrNode;


2. 树的初始化

PtrNode MakeEmpty(PtrNode node)
{
if (node != nullptr) {
MakeEmpty(node);
MakeEmpty(node);
delete node;
}
return nullptr;
}


3. 插入操作

PtrNode Insert(int x, PtrNode& node)
{
if (node == nullptr) {
node = new TreeNode;
node->element = x;
node->left = node->right = nullptr;
}
else if (x < node->element) {
node->left = Insert(x, node->left);
}
else if (x > node->element) {
node->right = Insert(x, node->right);
}

return node;
}

4. 查找操作

PtrNode Find(int x, PtrNode node)
{
if (node == nullptr) {
return nullptr;
}
else if (x < node->element) {
return Find(x, node->left);
}
else if (x > node->element) {
return Find(x, node->right);
}
// find element
else {
return node;
}
}


5. 查找最小值

PtrNode FindMin(PtrNode node)
{
if (node == nullptr)
return nullptr;
else if (node->left == nullptr)
return node;
else
return FindMin(node->left);
}
6. 删除操作

PtrNode Delete(int x, PtrNode node)
{
if (x < node->element) {
node->left = Delete(x, node->left);
}
else if (x > node->element) {
node->right = Delete(x, node->right);
}
// two or more node
else if (node->left && node->right) {
PtrNode temp = FindMin(node->right);
node->element = temp->element;
node->right = Delete(temp->element, node->right);
}
else {

4000
PtrNode temp = node;
if (node->left == nullptr) {
node = node->right;
}
else if (node->right == nullptr) {
node = node->left;
}
delete temp;
}
return node;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: