二叉查找树

来源:互联网 发布:阿里云到底是干嘛的 编辑:程序博客网 时间:2024/06/06 20:17

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

使二叉树成为二叉查找树的性质是,对树中的每个节点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 elementelse {return node;}}

5. 查找最小值

PtrNode FindMin(PtrNode node){if (node == nullptr)return nullptr;else if (node->left == nullptr)return node;elsereturn 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 nodeelse if (node->left && node->right) {PtrNode temp = FindMin(node->right);node->element = temp->element;node->right = Delete(temp->element, node->right);}else {PtrNode temp = node;if (node->left == nullptr) {node = node->right;}else if (node->right == nullptr) {node = node->left;}delete temp;}return node;}





0 0
原创粉丝点击