建立一棵樹之前,我們需要先建立「樹節點」類別。
由於實作的樹為「二元搜尋樹」,所以我們稱樹節點類別為 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 相關的類別方法其實很多,不過今天這篇我們就完成建構子就好。
其餘的也不會太難(除了 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 代表著整棵樹),且外部也不需要去觸及這個屬性。
下一篇,我們就來新增樹的節點吧!