目錄 (table of contents)
類的部分實現
二叉樹是一種特殊的樹,在上一節中也介紹了樹的其他形式,例如:霍夫曼樹,b樹等。其中,二叉樹的常用操作有
1. 確定樹高
2. 確定元素數目
3. 複製
4. 顯示或列印二叉樹
5. 確定兩顆二叉樹是否一樣
6. 刪除整顆樹
這些操作都可以通過有步驟的遍歷二叉樹來完成,如果不知道如何遍歷二叉樹的話請返回:資料結構之二叉樹(一)
在構建二叉樹,我們先要知道二叉樹的資料成員和成員函式應該是什麼。首先資料成員要有記錄樹節點的變數,以便我們返回樹的節點個數,乙個指向根節點的指標(可用於遍歷操作等)。成員函式中,我們應該有上述提到的所有部分或全部操作(每個人的需求不一樣,看自己的資料結構需要什麼,自由組合等等)。因此**實現為:
template
class linkedbinarytree : public binarytree>
void preorder(void (*thevisit)(binarytreenode*))
void inorder(void (*thevisit)(binarytreenode*))
void postorder(void (*thevisit)(binarytreenode*))
void
int size() const
void levelorder(void (*)(binarytreenode*));
void erase()
private:
int m_itreesize;
binarytreenode*m_proot; // 指向根節點
static
void (*visit))(binarytreenode*); // 訪問函式
static
void preorder(binarytreenode*); // 前序遍歷
static
void inorder(binarytreenode*); // 中序遍歷
static
void dispose(binarytreenode*t) // 後序遍歷
}
注意事項:
void (*)(binarytreenode*)
是一種函式型別,這種函式的返回值為void, 它的引數型別為binarytreenode*, 即是乙個指標
思路:首先取它左子樹的高度,然後取它右子樹的高度,最後把左右子樹高度的最大值加1,取得樹的高度
思路:前序或中序或後序遍歷,每次遍歷刪除節點即可
思路:如果兩顆樹的節點數不一樣,則直接輸出不相等,前序,中序或後序遍歷每個節點的節點元素,兩顆樹進行數值比較
template
void linkedbinarytree::preorder(binarytreenode*t)
}
template
int linkedbinarytree::height(binarytreenode*t)
資料結構之二叉樹
在二叉樹中每個節點最多只能有兩個子節點。即左子節點和有子節點。在二叉樹中最重要的操作應當是遍歷。即按照某一順序訪問二叉樹中的每乙個節點。一般有如下幾種遍歷方法 1 前序遍歷,即先訪問根幾點,然後再訪問左子節點,最後訪問右子節點。2 中序遍歷,即先訪問左子節點,然後再訪問根節點,最後訪問右子節點。3 ...
資料結構之二叉樹
定義 滿足以下條件的就是樹 1.有且僅有乙個特定的稱為根root的結點。2.當n 1時,其餘結點可分為m m 0 個互不相交的有限集,其中每個集合本身又是乙個棵樹,並稱為根的子樹。樹是資料結構中一種常見的資料結構,比如我們排序中常見的二叉樹,紅黑樹等。最常見的是樹形表示法和廣義表表示法。樹的結構示意...
資料結構之二叉樹
來看一下樹的結構 class treenode public treenode string value 首先,為了方便後面看到效果,先手動初始化乙個有4個節點的二叉樹 tree tree new tree treenode root new treenode root treenode node1...