標籤:
很久沒有接觸二叉樹了,寫這個當作練手,接下來會比較詳細地實現二叉樹的各個功能及應用。
/** BinaryTree.cpp* Author: Qiang Xiao* Time: 2015-07-17*/#include<iostream>#include<string>using namespace std;template<class ElemType>class BinaryNode{public: ElemType data; BinaryNode<ElemType>* leftChild; BinaryNode<ElemType>* rightChild; BinaryNode(); BinaryNode(const ElemType elem, BinaryNode<ElemType>* left = NULL, BinaryNode<ElemType>* right = NULL); void print() const;};template<class ElemType>void BinaryNode<ElemType>::print() const{ cout << this->data << endl;}template<class ElemType>BinaryNode<ElemType>::BinaryNode(){ this->leftChild = NULL; this->rightChild = NULL;}template<class ElemType>BinaryNode<ElemType>::BinaryNode(const ElemType elem, BinaryNode<ElemType>* left, BinaryNode<ElemType>* right){ this->data = elem; this->leftChild = left; this->rightChild = right;}/**************************************************************************************************/template<class ElemType>class BinaryTree{ private: BinaryNode<ElemType>* root; public: BinaryTree(); BinaryTree(BinaryNode<ElemType>* r);// ~BinaryTree(); BinaryNode<ElemType>* getRoot() const; bool isEmpty() const; void preOrder(BinaryNode<ElemType>* r) const; void inOrder(BinaryNode<ElemType>* r) const; void postOrder(BinaryNode<ElemType>* r) const;};template<class ElemType>BinaryTree<ElemType>::BinaryTree(BinaryNode<ElemType>* r){ root= r;}template<class ElemType>BinaryTree<ElemType>::BinaryTree(){ root= new BinaryNode<ElemType>();}template<class ElemType>BinaryNode<ElemType>* BinaryTree<ElemType>::getRoot() const{ return root;}template<class ElemType>bool BinaryTree<ElemType>::isEmpty() const{ return root== false;}template<class ElemType>void BinaryTree<ElemType>::preOrder(BinaryNode<ElemType>* r) const{ if(r== NULL) return; cout<<r->data<<"\t"; preOrder(r->leftChild); preOrder(r->rightChild);}template<class ElemType>void BinaryTree<ElemType>::inOrder(BinaryNode<ElemType>* r) const{ if(r== NULL) return; inOrder(r->leftChild); cout<<r->data<<"\t"; inOrder(r->rightChild);}template<class ElemType>void BinaryTree<ElemType>::postOrder(BinaryNode<ElemType>* r) const{ if(r== NULL) return; postOrder(r->leftChild); postOrder(r->rightChild); cout<<r->data<<"\t";}int main(){ BinaryNode<string>* right1= new BinaryNode<string>("RIGHT1"); BinaryNode<string>* left= new BinaryNode<string>("LEFT", NULL, right1); BinaryNode<string>* right= new BinaryNode<string>("RIGHT"); BinaryNode<string>* root = new BinaryNode<string>("ROOT", left, right); BinaryTree<string>* tree= new BinaryTree<string>(root); cout<<"preOrder: \t"; tree->preOrder(root); cout<<"\ninOrder: \t"; tree->inOrder(root); cout<<"\npostOrder: \t"; tree->postOrder(root); cout<<endl; return 0;}
下面是運行結果:
[email protected]:~/C/DataStructure$ ./BinaryTree.o preOrder: ROOT LEFT RIGHT1 RIGHT inOrder: LEFT RIGHT1 ROOT RIGHT postOrder: RIGHT1 LEFT RIGHT ROOT [email protected]-ubun:~/C/DataStructure$
這個版本是初級版本,遍曆採用遞迴方式。接下來將不斷完善!
歡迎交流!
一個簡單二叉樹的C++實現(一)