您的位置:首页 > 编程语言 > C语言/C++

c++二叉排序树的链式实现

2013-04-11 11:15 375 查看
二叉排序树链式实现,前序、中序、后序遍历

#include
<iostream>
#include
<iomanip>
#include
<assert.h>
using namespace
std;
////////////////////////////////////////////////////////////////////
//class TreeNode
////////////////////////////////////////////////////////////////////
 
template<class
NODETYPE> class
MyTree;//forward declare
template<class
NODETYPE>
class
TreeNode
{
    friend
class MyTree<
NODETYPE>;
public:
    TreeNode(
const NODETYPE & );
    NODETYPE
getData()const;
private:
    TreeNode<
NODETYPE>* leftPtr;
    NODETYPE
data;
    TreeNode<
NODETYPE>* rightPtr;
};
 
template<class
NODETYPE>
TreeNode<NODETYPE >::TreeNode(const
NODETYPE& d) :
leftPtr(0),data(d),rightPtr(0)

{
 
}
template<class
NODETYPE>
NODETYPE
TreeNode< NODETYPE>::getData()
const
{
    return
data;
}
 
///////////////////////////////////////////////////////////////////
//class MyTree
///////////////////////////////////////////////////////////////////
template<class
NODETYPE>
class
MyTree
{
public:
    MyTree();
    void
insertNode( const
NODETYPE& );
    void
preOrderTraversal()const;
//前序遍历
    void
inOrderTraversal()const;//中序遍历
    void
postOrderTraversal()const;//后序遍历
private:
    TreeNode<
NODETYPE>* rootPtr;
    //utility
    void
insertNodeHelper(TreeNode<
NODETYPE>** , const
NODETYPE&);
    void
preOrderHelper(TreeNode<
NODETYPE>* ) const;
    void
inOrderHelper(TreeNode<
NODETYPE>* ) const;
    void
postOrderHelper(TreeNode<
NODETYPE>* ) const;
};
 
template<class
NODETYPE>
MyTree<NODETYPE >::MyTree():
rootPtr(0)
{
 
 
}
 
template<class
NODETYPE>
void
MyTree< NODETYPE>::insertNode(
constNODETYPE &
d)
{
    insertNodeHelper( &
ccb7
rootPtr,d );
}
 
template<class
NODETYPE>
void
MyTree< NODETYPE>::preOrderTraversal()
const
{
    preOrderHelper(
rootPtr);
}
 
template<class
NODETYPE>
void
MyTree< NODETYPE>::inOrderTraversal()
const
{
    inOrderHelper(
rootPtr);
}
 
template<class
NODETYPE>
void
MyTree< NODETYPE>::postOrderTraversal()
const
{
    postOrderHelper(
rootPtr);
}
 
template<class
NODETYPE>
void
MyTree< NODETYPE>::insertNodeHelper(
TreeNode< NODETYPE>**
ptr, constNODETYPE &
d)
{
    if( *ptr == 0 )
//root node
    {
       *ptr =
new TreeNode<
NODETYPE>(d);
       assert( (*ptr)!= 0 );

    }
    else
    {
       if( ((*ptr)->data) <
d )
           insertNodeHelper( &(*ptr)->leftPtr,
d );
       else
if( (*ptr)->data>
d )
           insertNodeHelper( &(*ptr)->rightPtr,
d );
       else
           cout <<
d<< " dup"<<endl;
    }
}
 
 
template<class
NODETYPE>
void
MyTree< NODETYPE>::preOrderHelper(
TreeNode< NODETYPE>*
ptr) const
{
    if(
ptr != 0 )
    {
       cout <<
ptr->data <<
"";
       preOrderHelper(
ptr->leftPtr );
       preOrderHelper(
ptr->rightPtr );
    }
}
 
 
template<class
NODETYPE>
void
MyTree< NODETYPE>::inOrderHelper(
TreeNode< NODETYPE >*
ptr) const
{
    if(
ptr != 0 )
    {
       inOrderHelper(
ptr->leftPtr );
       cout <<
ptr->data <<
"";
       inOrderHelper(
ptr->rightPtr );
    }
 
}
 
 
template<class
NODETYPE>
void
MyTree< NODETYPE>::postOrderHelper(
TreeNode< NODETYPE>*
ptr ) const
{
    if(
ptr != 0 )
    {
       postOrderHelper(
ptr->leftPtr );
       postOrderHelper(
ptr->rightPtr );
       cout <<
ptr->data <<
"";
    }
}
 
int main(
void )
{
    MyTree<
int> intTree;
    int
intVal;
    cout <<
"Enter10 integer numbers:\n";
    for(
int i = 0;
i <10; ++i)
    {
       cin >>
intVal;
       intTree.insertNode(intVal );
    }
    cout <<
"\npreOrdertraversal:";
    intTree.preOrderTraversal();
 
    cout <<
"\ninOrdertraversal:";
    intTree.inOrderTraversal();
 
    cout <<
"\npostOrdertraversal:";
    intTree.postOrderTraversal();
 
    cout <<
"\n\n";
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 搜索 遍历