二叉搜索树(C++)
来源:互联网 发布:mac sierra是什么 编辑:程序博客网 时间:2024/05/16 09:14
#include <iostream>using namespace std;typedef struct BiTNode{int data;struct BiTNode *lchild, *rchild;}BiTNode,*BiTree;class solution{public:bool searchBst(BiTree root, int key, BiTree f, BiTree *p){if (!root){*p = f;return false;}else if (root->data == key){*p = root;return true;}else if (key < root->data){searchBst(root->lchild, key, root, p);}else{searchBst(root->rchild, key, root, p);}}bool insertNode(BiTree *root,int key){BiTree p;if (!searchBst(*root, key, NULL, &p)){BiTNode* s = new BiTNode;s->data = key;s->lchild = s->rchild = NULL;if (!p){*root = s;}else if (key < p->data){p->lchild = s;}else{p->rchild = s;}return true;}else{return false;}}void printTree(BiTree root){if (root == NULL)return;printTree(root->lchild);cout << root->data << " ";printTree(root->rchild);}BiTNode* maxValue(BiTree root){if (!root)return NULL;BiTNode* s = root;while (s->rchild){s = s->rchild;}return s;}BiTNode* minValue(BiTree root){if (!root)return NULL;BiTNode* s = root;while (s->lchild){s = s->lchild;}return s;}bool Delete(BiTree* p){BiTree q,s;if ((*p)->lchild == NULL){BiTree q = *p;*p = (*p)->rchild;delete q;}else if ((*p)->rchild == NULL){BiTree q = *p;*p = (*p)->lchild;delete q;}else{s = (*p)->lchild;q = *p;while (s->rchild){q = s;s = s->rchild;}(*p)->data = s->data;if (*p == q){q->lchild = s->lchild;}else{q->rchild = s->lchild;}delete s;}return true;}bool DeleteBST(BiTree* root, int key){if (!root && !(*root))return false;else{if (key == (*root)->data)Delete(root);else if (key < (*root)->data)return DeleteBST(&((*root)->lchild), key);elsereturn DeleteBST(&((*root)->rchild), key);}}};int main(){solution s;BiTree root=NULL;int a[10] = { 6, 4, 8, 5, 0, 9, 3, 7, 1, 2 };for (int i = 0; i < 10; ++i){s.insertNode(&root, a[i]);}cout << "前序遍历结果:" << endl;s.printTree(root);cout << endl;cout << "最大值:" << endl;cout << (s.maxValue(root))->data << endl;cout << "最小值:" << endl;cout << (s.minValue(root))->data << endl;cout << "查找值为'3'的结点:" << endl;BiTree p;cout << (s.searchBst(root, 3, NULL, &p) ? "exist" : "no exist" )<< endl;cout << (s.searchBst(root, 8, NULL, &p) ? "exist" : "no exist") << endl;cout << (s.searchBst(root, 13, NULL, &p) ? "exist" : "no exist") << endl;cout << "删除值为3的结点:" << endl;s.DeleteBST(&root, 3);s.printTree(root);cout << endl;return 0;}
0 0
- 二叉搜索树(C++)
- 二叉搜索树(c++)
- 二叉搜索树(c实现)
- 数据结构(c++)<二叉搜索树>
- 二叉搜索树(C语言)
- 二叉树/二叉搜索树的操作汇集(c++)
- C语言二叉搜索树
- [C++] 实现二叉搜索树
- 3.16(c程序实现)特殊的平衡二叉搜索树之完全二叉搜索树
- 数据结构--二叉搜索树的实现(C++)
- 题目1009:二叉搜索树(C语言实现)
- Linux c 二叉搜索树(节点创建、插入BST)
- 二叉搜索树 c 语言实现
- C语言二叉搜索树基本操作
- 二叉搜索树 C语言实现
- C/C++生成二叉树并搜索
- 【C基础】二叉搜索树的实现
- <C/C++数据结构>二叉搜索树
- linux shell中 if else以及大于、小于、等于逻辑表达式介绍
- Linked List Cycle II
- FreeMarker语法知识
- Java基础日记———IO流(下)
- Android-优化UI性能(1)-减少主线程的阻塞时间
- 二叉搜索树(C++)
- CF 3B Lorry
- 字符串初始化
- 百度移动统计的应用
- 前端小tips之标签
- 分享知识 用python开发简单的聊天工具
- Socket编程知识必学
- 简述spring mvc 和spring
- iOS中滤镜的使用(二)滤镜组合