iT邦幫忙

2022 iThome 鐵人賽

DAY 20
0
Software Development

用C++ 設計程式中的系統櫃系列 第 20

[Day 20] 用C++ 設計程式中的系統櫃:Class BST

  • 分享至 

  • xImage
  •  

建立一棵樹之前,我們需要先建立「樹節點」類別。

由於實作的樹為「二元搜尋樹」,所以我們稱樹節點類別為 BSTNode


定義 BSTNode

從之前的二元樹模型可以看到,每一個節點都有兩個子節點(也許是NULL),因此我們為他新增 left, right 兩個指標。接著就是指標 parent ,為了能夠觸及父節點,我們將它納入節點屬性。

class BSTNode {
public:
    BSTNode ();
    BSTNode (int _data);
    int data;
    BSTNode *parent, *left, *right;
};

BSTNode::BSTNode() {
    this -> parent = NULL;
    this -> left = NULL;
    this -> right = NULL;
}

BSTNode::BSTNode(int _data) {
    this -> data = _data;
    this -> parent = NULL;
    this -> left = NULL;
    this -> right = NULL;
}

腦筋急轉彎:
如果一棵樹所有節點的 BSTNode *left / *right 都為 NULL,那這棵樹其實可以簡化為「鏈結串列」


定義 BST

BST 相關的類別方法其實很多,不過今天這篇我們就完成建構子就好。
其餘的也不會太難(除了 remove() 相對困難)。

class BST {
public:
    BST();
    void insert(int _data);
    void remove(int _data);
    BSTNode *getMax();
    BSTNode *getMin();
    void preorderTraversal();
    void inorderTraversal();
    void postorderTraversal();
private:
    BSTNode *root;
};

BST::BST() {
    this -> root = NULL;
}

為什麼 root 要設為私有變數?
因為我們希望只有類別方法可以更改他(root 代表著整棵樹),且外部也不需要去觸及這個屬性。


下一篇,我們就來新增樹的節點吧!


上一篇
[Day 19] 用C++ 設計程式中的系統櫃:二元搜尋樹與子樹
下一篇
[Day 21] 用C++ 設計程式中的系統櫃:BST::insert()
系列文
用C++ 設計程式中的系統櫃30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言