马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
C++ 二叉搜刮树代码- #include <iostream>
- using namespace std;
- template<typename T>
- struct TreeNode{
- T val;
- TreeNode *left;
- TreeNode *right;
- TreeNode():val(0), left(NULL), right(NULL){}
- TreeNode(T x):val(x), left(NULL), right(NULL){}
- };
- template<typename T>
- class BinarySearchTree{
- private:
- TreeNode<T> *root;
-
- TreeNode<T>* insertNode(TreeNode<T> *node, T value);
- TreeNode<T>* removeNode(TreeNode<T> *node, T value);
- bool searchNode(TreeNode<T> *node, T value);
- void inOrder(TreeNode<T> *node);
- public:
- BinarySearchTree(): root(NULL){}
- ~BinarySearchTree();
-
- void insert(T value){
- root = insertNode(root, value);
- }
-
- void remove(T value){
- root = removeNode(root, value);
- }
-
- bool search(T value){
- return searchNode(root, value);
- }
- void inOrderTraversal(){
- inOrder(root);
- cout << endl;
- }
- };
- template<typename T>
- BinarySearchTree<T>::~BinarySearchTree(){
- while(root){
- remove(root->val);
- }
- }
- template<typename T>
- TreeNode<T>* BinarySearchTree<T>::insertNode(TreeNode<T> *node, T value){
- if(node == NULL){
- return new TreeNode<T>(value);
- }
- if(value < node->val){
- node->left = insertNode(node->left, value);
- }else if(value > node->val){
- node->right = insertNode(node->right, value);
- }
- return node;
- }
- template<typename T>
- TreeNode<T>* BinarySearchTree<T>::removeNode(TreeNode<T> *node, T value){
- if(node == NULL){
- return NULL;
- }
- if(value < node->val){
- node->left = removeNode(node->left, value);
- }else if(value > node->val){
- node->right = removeNode(node->right, value);
- }else{
- if(node->left == NULL && node->right == NULL){
- delete node;
- return NULL;
- }else if(node->left == NULL){
- TreeNode<T> *rightChild = node->right;
- delete node;
- return rightChild;
- }else if(node->right == NULL){
- TreeNode<T> *leftChild = node->left;
- delete node;
- return leftChild;
- }else{
- TreeNode<T> *replacement = node->right;
- while(replacement->left){
- replacement = replacement->left;
- }
- node->val = replacement->val;
- node->right = removeNode(node->right,replacement->val);
- }
- }
- return node;
- }
- template<typename T>
- bool BinarySearchTree<T>::searchNode(TreeNode<T> *node, T value){
- if(node == NULL){
- return false;
- }
- if(value < node->val){
- return searchNode(node->left, value);
- }else if(value > node->val){
- return searchNode(node->right, value);
- }
- return true;
- }
- template<typename T>
- void BinarySearchTree<T>::inOrder(TreeNode<T> *node){
- if(node){
- inOrder(node->left);
- cout << node->val << ',';
- inOrder(node->right);
- }
- }
- int main()
- {
- BinarySearchTree<int> bst;
- bst.insert(50);
- bst.insert(40);
- bst.insert(60);
- bst.insert(80);
- bst.insert(90);
- bst.insert(10);
- bst.insert(20);
- bst.insert(30);
- bst.insert(70);
- bst.inOrderTraversal();
- cout << bst.search(9090) << endl;
- cout << bst.search(70) << endl;
- bst.remove(70);
- bst.inOrderTraversal();
- bst.insert(65);
- bst.inOrderTraversal();
- return 0;
- }
复制代码 |