資料結構1 (查詢二叉樹的實現)

2021-07-23 17:41:53 字數 2193 閱讀 7861

理論解釋:

很詳細。不過函式實現略微複雜,不容易看懂。

函式實現:

簡單清晰。不過注釋比較少,要認真看一會。

本人所用的測試**是基於第二個鏈結,詳細的步驟解釋,參看**

#include "stdafx.h"

#include using std::cout;

using std::cin;

using std::endl;

struct tree // 其實該結構體應該是節點(node,很多參考資料都有node結構體)。但是理解為子樹更容易理解操作過程,所以定義為tree是別有用心的

;// * 二叉查詢樹的類

class btree // 這個btree的b是binary search tree的b

// 初始化

void create_bstree(int);

void printtree(tree* subtree);

};// * 類函式的實現

void btree::create_bstree(int key)

// 獲得

if(back->key >key) // 決定new_node的左右位置

back->left = new_node;

else

back->right = new_node;

}}// * 顯示函式(有些不太直觀,不過可以證明,樹已經建立)

void printtree(tree* subtree)

}int _tmain()

; int k;

k = sizeof(array)/sizeof(array[0]);

cout<<"二叉樹順序: "<

在學習二叉樹的時候,我最關注的是這個資料結構是怎麼存在的,資料按照規則存放在哪。

按照我的理解,資料本身無序,所以建立資料結構,需要給數包裝。這個包裝就是tree結構體。

包裝以後的資料,帶有其他的引數變數(指標居多),用於支撐這個結構。(方便後續的資料處理)

在記憶體中,把資料報裝,用指標建立兩兩間關係,資料結構就好了。

tip:

其實,顯示函式的優劣很重要。但是寫不出來好的也沒關係。我們可以在debug下設定斷點,一步步檢視root裡面資料的變化,就可以看到資料的層次。

尋找函式(宣告部分)

// * 二叉查詢樹的類

class btree

void create_bstree(int);

void printtree(tree*); // 可以只給出型別

int getdepth(tree*,int);

void setdepth(tree*);

tree* find(tree* dtree, int x);

private:

int depth;

};

尋找函式(實現部分)

// * 給元素賦值深度(可以放在create_bstree中嗎?思路就不清晰了。)

void btree::setdepth(tree* dtree)

if(dtree->right != null )

}}// * 查詢元素,返回其父(子樹的root)

// 邏輯解釋:最大的困惑是if(dtree->key == x && dtree != null)似乎是更合適的條件,相等,而且非空。

// 其實不然。相等自然沒錯,但是「&& 非空」的條件,想想當迭代一直到樹葉的時候會怎麼樣?

// 條件不成立,去執行 dtree->key,這時候就會發生記憶體讀取錯誤。因為這時候的dtree是null!

/*tree* btree::find(tree* dtree, int x)

*/// 改進後的,增加外來元素的判斷,外來元素返回null

tree* btree::find(tree* dtree, int x)

else // 往左尋找 }

// * 查詢深度(要先執行setdepth() )

int btree::getdepth(tree* dtree, int x)

呼叫示例

cout<<"100的深度是"<

同樣可以在

可以參看連線2

1.先序遍歷

2.中序遍歷

3.後序遍歷

資料結構 二叉樹 1

二叉樹 構建 二叉樹的構建採用的是先序遍歷,先儲存根節點然後左右節點,用遞迴的思想將所有資料放在樹中。實現 實現了4種訪問方法,先序,中序,後序,和層序的訪問方法都採用遞迴的方式。include include includeusing namespace std templatestruct ro...

資料結構 二叉樹的實現

描述 構造乙個二叉樹類,實現建立二叉樹和對二叉樹進行前序 中序 後序遍歷 輸入 擴充套件的前序序列.在一棵樹處理結束後,根據響應判斷是否處理下一棵樹 輸出 前序 中序 後序 樣例輸入 ab c yabc n樣例輸出 abcbac bcaabc cbacba include using namespa...

資料結構 二叉樹的實現

typedef char datatype typedef struct bnode node typedef struct btree btree void creatbinarytree btree bt 通過前序遍歷的陣列 abd e h cf g 構建二叉樹 node creatbinary...