STL實現二叉樹遍歷
阿新 • • 發佈:2017-10-08
nod 數據 blog new friend const turn ace lrn
#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; }
STL實現二叉樹遍歷