二叉搜索树
来源:互联网 发布:怎样进注册表优化电脑 编辑:程序博客网 时间:2024/05/22 09:02
二叉搜索树
#include <iostream>using namespace std;#define length 10#define errorValue -1int num;struct node { node* left; node* right; int value; node(int a = errorValue, node* n1 = NULL, node* n2 = NULL) :value(a), left(n1), right(n2) {}};node* searchNode(node* root, int value) { if (root == NULL) return NULL; else if (root->value == value) { return root; } else if (root->value < value) { return searchNode(root->right, value); } else { return searchNode(root->left, value); }}//要注意使用引用void insertTree(node*& root, int value) { if (root == NULL) { root = new node(value); } else if (root->value < value) { insertTree(root->right, value); } else if (root->value > value) { insertTree(root->left, value); } //重复则不做处理}void inOrderPrint(node* root) { if (root != NULL) { inOrderPrint(root->left); cout << root->value << ' '; inOrderPrint(root->right); }}void preOrderPrint(node* root) { if (root != NULL) { cout << root->value << ' '; preOrderPrint(root->left); preOrderPrint(root->right); }}void postOrderPrint(node* root) { if (root != NULL) { postOrderPrint(root->left); postOrderPrint(root->right); cout << root->value << ' '; }}//返回最大的值int maxValue(node* root) { if (root == NULL) return errorValue; while (root->right != NULL) { root = root->right; } return root->value;}//返回最大的节点node*& maxNode(node*& root) { while (root->right != NULL) { root = root->right; } return root;}//返回最小的值int minValue(node* root) { if (root == NULL) return errorValue; while (root->left != NULL) { root = root->left; } return root->value;}//返回最小的节点node*& minNode(node*& root) { while (root->left != NULL) { root = root->left; } return root;}//build a sorted array used to find valuevoid buildArr(int* a, node* root) { if (root != NULL) { buildArr(a, root->left); a[num++] = root->value; buildArr(a, root->right); }}//返回大于value的第一个值int moreThanValue(node* root, int value) { int a[length] = { 0 }; num = 0; buildArr(a, root); for (int i = 0; i < length; i++) { if (a[i] > value) { return a[i]; } } return errorValue;}//返回小于value的第一个值int smallerThanValue(node* root, int value) { int a[length] = { 0 }; num = 0; buildArr(a, root); for (int i = 0; i < length; i++) { if (a[i] > value) { return i == 0 ? errorValue : a[i - 1]; } } return errorValue;}//返回小于value节点的第一个值int predecessor(node* root, int value) { node* temp = searchNode(root, value); if (temp == NULL) return errorValue; if (temp->left != NULL) return maxValue(temp->left); else return errorValue;}//返回大于value节点的第一个值int successor(node* root, int value) { node* temp = searchNode(root, value); if (temp == NULL) return errorValue; if (temp->right != NULL) return minValue(temp->right); else return errorValue;}bool deleteNode(node*& root, int value) { if (root == NULL) return false; else if (root->value < value) return deleteNode(root->right, value); else if (root->value > value) return deleteNode(root->left, value); else { if (root->left == NULL && root->right == NULL) { delete root; root = NULL; } else if (root->left != NULL && root->right != NULL) { //删除节点右边最小值的点,将其移至上方 root->value = minValue(root->right); deleteNode(root->right, root->value); } else { node* temp = root; root = root->left == NULL ? root->right : root->left; delete temp; temp = NULL; } return true; }}void emptyTree(node*& root) { if (root == NULL) return; else { emptyTree(root->right); emptyTree(root->left); delete root; root = NULL; }}
0 0
- 【二叉搜索数】HDU3791二叉搜索树
- 二叉树--二叉搜索树
- 【二叉树】二叉搜索树
- 二叉树- 二叉搜索树
- 【搜索树】二叉搜索树
- 二叉搜索树BSTree
- 二叉搜索树
- 二叉搜索树
- 二叉搜索树
- 最优二叉搜索树
- 二叉搜索树
- 二叉搜索树
- HDOJ3791 二叉搜索树
- 二叉查找树搜索
- 二叉搜索树
- 二叉搜索树
- BST 二叉搜索树
- 二叉搜索树
- android king
- Apache+tomcat集群
- zzuli OJ 1009: 求平均分
- SQLQuery
- 右值引用和move语义
- 二叉搜索树
- tomcat同一ip部署多个网站
- axia2+spring配置实例
- LeetCode:Implement Queue using Stacks
- 1080. Graduate Admission (30)
- 真正意义上下一代 Windows Embedded:有关 Windows 10 "Athens" 的事
- Ubuntu安装svn
- 让用户选择查看readme
- Extjs4.2 Tree使用技巧小结demo