#include
using namespace std;
class Tree{
public:
//constructor
Tree():m_root(NULL), m_size(0){}
//destructor
~Tree(){
clear();
}
// insert
void insert(int data) {
insert(new Node(data), m_root);
m_size++;
}
//delete 含有data的一个节点
bool remove(int data) {
//查找匹配节点
Node*& find_node = find(data, m_root);
if (find_node) {
//将匹配节点的左子树插入右子属
insert(find_node->m_left, find_node->m_right);
Node *node = find_node;
//用匹配节点的右子数去取代匹配节点
find_node = find_node->m_right;
delete node;
m_size--;
return true;
}
return false;
}
//删除data的所有节点
void destroy(int data) {
while(remove(data));
}
//清空树
void clear(){
clear(m_root);
}
//update
void update(int _old, int _new) {
while(remove(_old))
insert(_new);
}
//exist
bool exist(int data) {
return find(data, m_root) != NULL;
}
// 遍历
void search() {
search(m_root);
}
//节点数
unsigned int size() {
return m_size;
}
//树高
unsigned int height() {
return height(m_root);
}
private:
class Node{
public:
Node(int data):m_data(data), m_left(NULL),m_right(NULL){}
int m_data;
Node *m_left;//left
Node *m_right;//right
};
void insert (Node *node, Node *&tree) {
if(!tree)
tree = node;
else if (node) {
if(node->m_data < tree->m_data)
insert(node, tree->m_left);
else
insert(node, tree->m_right);
}
}
Node*& find(int data, Node*& tree) {
if(!tree)
return tree;
else if(data == tree->m_data)
return tree;
else if (data < tree->m_data)
return find(data, tree->m_left);
else
return find(data, tree->m_right);
}
void clear (Node *&tree){
if(tree){
clear(tree->m_left);
clear(tree->m_right);
delete tree;
tree = NULL;
}
}
void search(Node *&tree) {//中序遍历,在这个函数中,调整顺序,可实现前序遍历和后序遍历
if(tree) {
search(tree->m_left);
search(tree->m_right);
cout<m_data<<" ";
}
}
unsigned int height(Node *&tree) {
if(tree){
unsigned int lh = height(tree->m_left);
unsigned int rh = height(tree->m_right);
return (lh > rh?lh:rh) + 1;
}
}
Node *m_root;//root
unsigned int m_size;//size
};
int main() {
Tree tree;
tree.insert(5);
tree.insert(3);
tree.insert(7);
tree.insert(4);
tree.insert(2);
tree.insert(8);
tree.insert(6);
/* tree.insert(7);
// tree.insert(45);
// tree.insert(4151);
// tree.insert(4);
tree.search();
cout<<endl;
// tree.destroy(7);
// tree.search();
*/ cout<<tree.size()<<endl;
cout<<tree.height()<<endl;
cout<<endl;
tree.remove(4);
// tree.remove(7);
tree.search();
cout<<endl;
cout<<tree.size()<<endl;
cout<<tree.height()<<endl;
// tree.exist(7);
return 0;
}
二叉排序树
最新推荐文章于 2024-12-08 08:30:00 发布