理論解釋:
很詳細。不過函式實現略微複雜,不容易看懂。
函式實現:
簡單清晰。不過注釋比較少,要認真看一會。
本人所用的測試**是基於第二個鏈結,詳細的步驟解釋,參看**
#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...