二叉鏈表的實現

來源:互聯網
上載者:User
#include <iostream>using namespace std;template <class DataType>struct BiNode {    DataType data;    BiNode<DataType>* lchild, * rchild;};template <class DataType>class BiTree{private:    BiNode<DataType>* root;    ///指向根節點的頭指標    BiNode<DataType>* Creat(BiNode<DataType>* bt);    ///建構函式調用    void Release(BiNode<DataType>* bt);    ///解構函式調用    void PreOrder(BiNode<DataType>* bt);    ///前序走訪函數調用    void InOrder(BiNode<DataType>* bt);    ///中序遍曆函數調用    void PostOrder(BiNode<DataType>* bt);    ///後序遍曆函數調用public:    BiTree() {   root = Creat(root);   } ///建構函式,建立一棵二叉樹    ~BiTree() {   Release(root);   }  ///解構函式,釋放各節點的儲存空間    void PreOrder() {   PreOrder(root);   }  ///前序走訪二叉樹    void InOrder() {   InOrder(root);   }  ///中序遍曆二叉樹    void PostOrder() {   PostOrder(root);   }  ///後序遍曆二叉樹    void LeverOrder();   ///層序遍曆二叉樹};template <class DataType>BiNode<DataType>* BiTree<DataType>::Creat(BiNode<DataType>* bt)     ///建立二叉樹{    char ch;    cin >> ch; ///輸入資訊,假設為字元    if (ch == '#')        bt = NULL; ///建立一棵空樹    else {        bt = new BiNode;   bt->data = ch; ///產生一個節點,資料域為ch        bt->lchild = Creat(bt->lchild); ///遞迴建立左子樹        bt->rchild = Creat(bt->rchild); /// 遞迴建立右子樹    }    return bt;}template <class DataType>void BiTree<DataType>::Release(BiNode<DataType>* bt)     ///釋放二叉樹{    if (bt) {        Release(bt->lchild);   //釋放左子樹        Release(bt->rchild);   ///釋放右子樹        delete bt;   ///釋放根節點    }}template <class DataType>   ///前序走訪函數調用void BiTree<DataType>::PreOrder(BiNode<DataType>* bt){    if (bt == NULL) ///遞迴調用的結束條件        return ;    else {        cout << bt->data; ///訪問根節點bt的資料域        PreOrder(bt->lchild);   ///前序遞迴遍曆bt的左子樹        PreOrder(bt->rchild);   ///前序遞迴遍曆bt的右子樹    }}template <class DataType>   ///中序遍曆函數調用void BiTree<DataType>::InOrder(BiNode<DataType>* bt){    if (bt == NULL) ///遞迴調用的結束條件        return ;    else {        InOrder(bt->lchild);   ///中序遞迴遍曆bt的左子樹        cout << bt->data; ///訪問根節點bt的資料域        InOrder(bt->rchild);   ///中序遞迴遍曆bt的右子樹    }}template <class DataType>   ///後序遍曆函數調用void BiTree<DataType>::PostOrder(BiNode<DataType>* bt){    if (bt == NULL) ///遞迴調用的結束條件        return ;    else {        PostOrder(bt->lchild);   ///後序遞迴遍曆bt的左子樹        PostOrder(bt->rchild);   ///後序遞迴遍曆bt的右子樹        cout << bt->data; ///訪問根節點bt的資料域    }}template <class DataType>   ///層序遍曆函數調用void BiTree<DataType>::LeverOrder(){    int front = -1,rear = -1; ///採用順序隊列,並假定不會發生上溢    if (root == NULL)        return ;   ///二叉樹為空白,演算法結束    Q[++rear] = root; ///根指標入隊    while (front != rear) { ///當隊列非空時        q = Q[++front]; ///出隊        cout << q->data;        if (q->lchild)            Q[++rear] = q->lchild;        if (q->rchild)            Q[++rear] = q->rchild;    }}int main(){    return 0;}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.