最近在学习二叉树,对于二叉树的代码实现着实有些头疼,因为二叉树的实现主要依靠递归,而递归需要将节点的地址传入,那么该如何定义根节点呢? 难道要定义在类模板外面,主函数里面吗? 很明显这样是不可行的。那该如何实现呢,我实在是头疼,网上看了好多篇,才疏学浅,看不懂。所以我打开了<<数据结构与算法分析>> 上面确实有关于删除操作的实现代码如下:
//Typename struct Link * SearchTree
//定义结构体指针 SearchTree
SearchTree Delete(T element, SearchTree x){
SearchTree* temp;
if( x == NULL )
Error("Element Not Found!");
else if( element < x->element ) // Go Left
x->left = Delete( element, x->left);
else if( element > x->element ) // Go Right
x->right = Delete( element, x->right);
else{
if( x->left && x->right ){ //两个儿子节点都存在
temp = findMin(x->right);//temp 为临时变量 保存将要被删除的节点
x->element = temp->element;
x->right = Delete(x->right);
}
else{
temp = x; //temp 发挥作用
if( x->left == NULL )
x = x->right;
else