欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二叉排序树::c++模板实现::泛型类,只要能排序,我就可以排的二叉树!...

程序员文章站 2024-03-14 21:56:23
...

只要再有一个可以排序的类就可以直接使用这个二叉排序树,完全可重用性MAX

#include<iostream>
using namespace std;
template<class T>
class Node {
public:
	T val;
	int ln, rn;
	Node<T> *h;
	Node<T> *l;
	Node<T> *r;
	Node<T>(T value,Node *head) {
		this->val = value;
		this->h = head;
		this->l = nullptr;
		this->r = nullptr;
	}
};
template<class T>
class Tree {
public:
	Node<T> *root, *temp;
	Tree() {
		root = nullptr;
		temp = nullptr;
	}
	void add(T v) {
		if (root == nullptr) {
			root = new Node<T>(v, nullptr);
		}
		else {
			temp = root;
			while (true) {
				if (temp->val > v) {
					if (temp->l != nullptr) {
						temp = temp->l;
					}
					else {
						temp->l = new Node<T>(v, temp);
						return;
					}
				}
				else {
					if (temp->r != nullptr) {
						temp = temp->r;
					}
					else {
						temp->r = new Node<T>(v, temp);
						return;
					}
				}
			}
		}
	}
	void cut(T t) {
		temp = root;
		Node<T> *c;
		if (temp->val == t) {
			if (root->r!=nullptr) {
				root = temp->r;
				c = temp->r;
				temp = temp->l;
				while (c->l != nullptr) {
					c = c->l;
				}
				c->l = temp;
			}
			else if (root->l != nullptr) {
				root = temp->l;
			}
			else {
				root = nullptr;
			}
		}
		else {
			while (true) {
				if (temp->val > t) {
					if (temp->l->val == t) {
						c=temp->l->l;
						temp->l = temp->l->r;
						while (temp->l != nullptr) {
							temp = temp->l;
						}
						temp->l = c;
						return;
					}
					temp = temp->l;
				}
				else {
					if (temp->r->val == t) {
						c = temp->r->l;
						temp->r = temp->r->r;
						while (temp->r != nullptr) {
							temp = temp->r;
						}
						temp->r = c;
						return;
					}
					temp = temp->r;
				}
			}
		}
	}
	void zxbl(Node<T> *x) {
		if (x->l != nullptr)zxbl(x->l);
		cout << x->val << " ";
		if (x->r != nullptr)zxbl(x->r);
	}
	void print() {
		if (root == nullptr) {
			cout << "A" << endl;
		}
		else {
			zxbl(root);
		}
	}
};
int main() {
	Tree<int> a;
	int n = 50;
	a.add(50);
	a.add(30);
	a.add(70);
	a.add(15);
	a.add(49);
	a.add(55);
	a.add(80);
	a.cut(49);
	a.add(49);
	a.print();
	getchar();
	return 0;
}