一個簡單二叉樹的C++實現(一)

來源:互聯網
上載者:User

標籤:

很久沒有接觸二叉樹了,寫這個當作練手,接下來會比較詳細地實現二叉樹的各個功能及應用。

/**   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++實現(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.