二叉查找树
2016-07-10 01:43
232 查看
二叉树的一个重要应用是它们在查找中的应用。为了更方便的阐述二叉查找树的概念,我们这里考虑关键字为互异整数的情形。
使二叉树成为二叉查找树的性质是,对树中的每个节点N,它的左子树的所有关键字小于N的关键字值,而又子树的所有关键字大于N的关键字值。后面我们可以看到,这种方式可以保证元素用统一的方式排序。
1. 二叉树节点声明
2. 树的初始化
3. 插入操作
4. 查找操作
5. 查找最小值
使二叉树成为二叉查找树的性质是,对树中的每个节点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; }
相关文章推荐
- c语言的基本数据类型
- django1.9学习之投票系统第一课时
- Codeforces Round #360 (Div. 2) D. Remainders Game 中国剩余定理
- HashMap的三种遍历方法 2
- 文章标题
- 第九次课总结
- 遍历HashMap的三种方法
- c 语言的标准输入输出,scanf,printf
- winxp下安装mysql5.7提示mysqld.exe不是有效的win32文件
- HashMap循环遍历方式及其性能对比
- 线性代数运算
- Java静态域与静态方法
- 多项式求根
- centOs安装jdk1.7
- 防止僵尸进程的fork编程
- cocos2dx 实习生培训计划
- C++中的friend友元函数详细解析
- Qt中使用WMI时遇到的那些坑儿
- Qt中使用WMI时遇到的那些坑儿
- 一分钟上手artTemplate