设为首页 加入收藏

TOP

C++模板实现的AVL树(二)
2015-02-02 14:32:58 来源: 作者: 【 】 浏览:23
Tags:模板 实现 AVL
root);
?while( !que.empty() )
?{
? Node* ptr = que.front();
? que.pop();
? cout<<"element:"<e<<"?th:"<left) - height(ptr->right)<? if(ptr->left != NULL)
? ?que.push(ptr->left);
? if(ptr->right != NULL)
? ?que.push(ptr->right);
?}
}


template typename AVLTree::Node* & AVLTree::getParent(Node* p)
{?
? ? if( p == m_root)?
? ? ? ? return NULL;?
? ? Node* ptr = m_root;?
? ? Node* ptf = ptr;?
? ? while( ptr != NULL )?
? ? {?
? ? ? ? if ( ptr->e == p->e )?
? ? ? ? ? ? return ptf;?
? ? ? ? if ( ptr->e > p->e )?
? ? ? ? {?
? ? ? ? ? ? ptf = ptr;?
? ? ? ? ? ? ptr = ptr->leftChild;?
? ? ? ? }?
? ? ? ? else?
? ? ? ? {?
? ? ? ? ? ? ptf = ptr;?
? ? ? ? ? ? ptr = ptr->rightChild;
? ? ? ? }?
? ? }?
}


template typename AVLTree::Node*& AVLTree::find(Type e)const
{?
? ? Node* ptr = m_root;?
?
? ? while(ptr != NULL)?
? ? {?
? ? ? ? if ( ptr->e == e )?
? ? ? ? ? ? return ptr;?
? ? ? ? if ( ptr->e > e )?
? ? ? ? ? ? ptr = ptr->leftChild;?
? ? ? ? else?
? ? ? ? ? ? ptr = ptr->rightChild;?
? ? }?
? ? //if ( ptr == NULL )?
? ? return NULL;?
}


template void AVLTree::clears(Node*& p)
{
?if( p == NULL )
? return;
?else
?{
? clears(p->left);
? clears(p->right);
? delete p;
? p = NULL;
? mLength--;
?}
}


template void AVLTree::clear()
{
?clears(mRoot);
}


template void AVLTree::erase(Type e,Node* &p)
{
?if( p == NULL)
? return;
?if( e > p->e)
?{
? erase(e,p->right);
? if( height(p->left) - height(p->right) == 2)
? {
? ?if( height(p->left->left) > height(p->left->right) )
? ? rotateLeft(p);
? ?else
? ? rotateLeftDouble(p);
? }
?}
?else if( e < p->e)
?{
? erase(e,p->left);
? if( height(p->left) - height(p->right) == -2)
? {
? ?if( height(p->right->right) > height(p->right->left) )
? ? rotateRight(p);
? ?else
? ? rotateRightDouble(p);
? }
?}
?else if ( e == p->e && p->left!= NULL && p->right!= NULL)
?{
? Node* pmax = p->left;
? while( pmax->right != NULL)
? {
? ?pmax = pmax->right;
? }
? p->e = pmax->e;
? erase(p->e,p->left);
?}
?else //最终的删除会在这里执行
?{
? Node* pNew = p->left==NULL ? p->right : p->left;
? delete p;
? p = pNew;
? mLength--;
?}
?if ( p!=NULL)
? p->h = max( height(p->left),height(p->right)) + 1;
}
#endif


//main.cpp


#include
#include "AVLTree.h"
using namespace std;


void main()
{
?int Arr[9] = {6,2,8,4,10,0,12,16,14};
?AVLTree Tr(Arr,9);
?Tr.traverse(Tr.getRoot());
?Tr.traverseByLevel(Tr.getRoot());


?Tr.erase(14,Tr.getRoot());
?Tr.traverse(Tr.getRoot());
?Tr.traverseByLevel(Tr.getRoot());
?cout<<"Tree's length is:"<?Tr.clear();
?cout<<"Tree's length is:"<

}


4 测试结果


C++模板实现的AVL树


C语言梳理一下,分布在以下10个章节中:


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++虚函数访问权限的改变 下一篇C++之 typedef void *HANDLE

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: