《算法导论》12、二叉查找树(C++实现)
来源:互联网 发布:数据库 黑名单表设计 编辑:程序博客网 时间:2024/05/17 08:03
没啥好说的,都是书上的功能。
#include <iostream>#include "stdio.h"using namespace std;struct Node{Node *p;int value;Node *left;Node *right;};Node* root;void inorderTreeWalk(Node* n){if (n != NULL){inorderTreeWalk(n->left);cout << n->value << " ";inorderTreeWalk(n->right);}}Node* treeSearch(Node* n, int value){if (n == NULL || n->value == value)return n;else{if (n->value > value)return treeSearch(n->left, value);elsereturn treeSearch(n->right, value);}}Node* treeMin(Node* n){Node* r=n;while (r->left!=NULL){r = r->left;}return r;}Node* treeMax(Node* n){Node* r = n;while (r->right != NULL){r = r->right;}return r;}Node* treeSuccessor(Node* n){Node* x = n;if (n->right != NULL)return treeMin(n->right);Node* y = n->p;while (y != NULL && x == y->right){x = y;y = y->p;}return y;}Node* treePredecessor(Node* n){Node* x = n;if (n->left != NULL)return treeMax(n->left);Node* y = n->p;while (y != NULL && x == y->left){x = y;y = y->p;}return y;}Node* treeInsert(Node* n, int key){Node* y = NULL;Node* x = n;if (x == NULL){x = new Node;x->p = NULL;x->value = key;x->left = NULL;x->right = NULL;root = x;return x;}while (x != NULL){y = x;if (x->value > key)x = x->left;elsex = x->right;}x = new Node;x->p = y;x->value = key;x->left = NULL;x->right = NULL;if (y != NULL){if (key < y->value)y->left = x;elsey->right = x;}return x;}void treeDelete(Node* n, Node* z){Node* x, * y;if (z->left == NULL || z->right == NULL)y = z;elsey = treeSuccessor(z);if (y->left != NULL)x = y->left;elsex = y->right;if (x != NULL)x->p = y->p;if (y->p == NULL)root=x;else if (y == y->p->left)y->p->left = x;elsey->p->right = x;if (y != z)z->value = y->value;delete y;}void treeDestroy(Node* n){if (n != NULL){treeDestroy(n->left);treeDestroy(n->right);delete n;}}void main(){int n = 10; //排序元素长度 for (int i = 0; i <n; i++){treeInsert(root, rand() % 1000);}inorderTreeWalk(root); //中序遍历cout << endl;Node* p = treeSearch(root, 962);if (p != NULL){cout << "结果:" << p->value << endl;treeDelete(root, p); //删除节点}elsecout << "无该节点" << endl;inorderTreeWalk(root); //中序遍历cout << endl;treeDestroy(root);system("pause");}
0 0
- 《算法导论》12、二叉查找树(C++实现)
- 二叉查找树 (算法导论12)
- 二叉查找树相关算法实现(算法导论12章)
- 算法导论--二叉查找树--C++实现
- 《算法导论》二叉查找树的实现
- 算法导论(八)二叉查找树
- 二叉查找树(来自算法导论)
- 算法导论-第12章-二叉搜索(查找)树
- 算法导论 二叉查找树
- 【算法导论】二叉查找树的操作C++实现
- 算法导论上二叉查找树的实现java
- 二叉查找数的实现(算法导论)
- 最优二叉查找树(动态规划算法实现) 算法导论216
- 《算法导论》CLRS算法C++实现(十)P151 二叉查找树
- 二叉查找树——算法导论第12章简易代码实现~
- 算法导论15.5最优二叉查找树实现(Java语言)
- 算法导论——(2)二叉查找树的实现
- 算法导论代码 第12章 二叉查找树
- UML类图基础
- 如何在真机上调试Android应用程序(图文详解)
- cocoapods 总结
- Linux系统下如何查看及修改文件读写权限
- 彻底理解ThreadLocal
- 《算法导论》12、二叉查找树(C++实现)
- 【Ubuntu 命令大全】查看信息
- ListView的item点击失效解决
- Android 运行时,有Please execute 'adb uninstall my.test' in a shell报错
- 关于时间不同时区的转换问题
- Centos7(Linux)版OpenVPN安装、配置教程
- android 驱动中的并发和竞争——completion
- 第十二周 项目3-日期时间类
- 深圳市中电照明股份有限公司牵手泛微