标签:friend stl private class tno binary add pac 遍历
#include<iostream>
using namespace std;
template<class Type>
class BSTree;
template<class Type>
class BinaryNode
{
friend class BSTree<Type>;
public:
BinaryNode():left(NULL),right(NULL){}
BinaryNode(const Type& value):data(value),left(NULL),right(NULL){}
private:
Type data;
BinaryNode *left;
BinaryNode *right;
};
template<class Type>
class BSTree{
BinaryNode<Type>*root;
public:
BSTree():root(NULL){}
BinaryNode<Type>* GetRoot() const{return root;}
Type AddValue(const Type& value);
void printData_NLR(const BinaryNode<Type>*startNode);//前序遍历
void printData_LNR(const BinaryNode<Type>*startNode);//中序遍历
void printData_LRN(const BinaryNode<Type>*startNode);//后序遍历
void Cout()
{
}
};
template<class Type>
Type BSTree<Type>::AddValue(const Type& value)
{
if(root==NULL)
{
root=new BinaryNode<Type>(value);
}
else
{
BinaryNode<Type>* node=root;
while(1)
{
if(value>node->data)
{
if(node->right==NULL)
{
node->right=new BinaryNode<Type>(value);
break;
}
else
{
node=node->right;
}
}
else
{
if(node->left==NULL)
{
node->left=new BinaryNode<Type>(value);
break;
}else
{
node=node->left;
}
}
}
}
}
//前序遍历
template<class Type>
void BSTree<Type>::printData_NLR(const BinaryNode<Type>* startNode)
{
if(startNode==NULL)
{
return ;
}
else
{
cout<<startNode->data<<" ";
printData_NLR(startNode->left);
printData_NLR(startNode->right);
}
}
//中序遍历
template<class Type>
void BSTree<Type>::printData_LNR(const BinaryNode<Type> *startNode)
{
if(startNode==NULL)
{
return ;
}
else
{
printData_LNR(startNode->left);
cout<<startNode->data<<" ";
printData_LNR(startNode->right);
}
}
//后序遍历
template<class Type>
void BSTree<Type>::printData_LRN(const BinaryNode<Type> *startNode)
{
if(startNode==NULL)
{
return ;
}
else
{
printData_LRN(startNode->left);
printData_LRN(startNode->right);
cout<<startNode->data<<" ";
}
}
int main()
{
BSTree<int> tree;
//填充数据
tree.AddValue(7);
tree.AddValue(4);
tree.AddValue(10);
tree.AddValue(1);
tree.AddValue(5);
tree.AddValue(-1);
tree.AddValue(9);
tree.AddValue(13);
tree.AddValue(12);
tree.AddValue(11);
tree.AddValue(14);
tree.AddValue(19);
cout<<"前序遍历:根节点->左子树->右子树"<<endl;
tree.printData_NLR(tree.GetRoot());
cout<<"\n中序遍历:左子树->根节点->右子树"<<endl;
tree.printData_LNR(tree.GetRoot());
cout<<"\n后序遍历:左子树->右子树->根节点"<<endl;
tree.printData_LRN(tree.GetRoot());
return 0;
}
标签:friend stl private class tno binary add pac 遍历
原文地址:http://www.cnblogs.com/enyala/p/7637292.html