資料結構之二叉樹 C 二

2021-07-23 01:20:05 字數 1645 閱讀 8452

目錄 (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...