对于一棵二叉树,如果删除的次数不多,通常可以使用懒惰删除策略:当一个元素要被删除时,它仍留在树中,只是做一个删除的记号。但因为这个记号的存在,所以要修改插入等其他操作。
代码的最后给出了删除叶子节点和输出指定范围内的节点的定义,仅供参考。
#include<iostream>
#include<cstdlib>
using namespace std;
template<typename T>
class BinaryTree{
public:
T element;
BinaryTree* left;
BinaryTree* right;
bool deleted; //懒惰删除标识符
BinaryTree(T e, BinaryTree* l = NULL, BinaryTree* r = NULL) :element(e), left(l), right(r){ deleted = false; }
void printNode(){
cout << this->element << " ";
}
};
template<typename T>
class binarySearchTree{
private:
BinaryTree<T> * root;
public:
binarySearchTree(){
root = NULL;
}
void insert(const T & x){
insert(x, root);
}
void printTree(){
cout << "中序" << endl;
printTree(root);
cout << endl << "后序" << endl;
printTree(root, 1);
}
//懒惰删除