樹之二叉樹

2021-10-03 05:08:20 字數 2075 閱讀 2015

二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。

二叉樹常被用作二叉查詢樹和二叉堆或是二叉排序樹。

滿二叉樹:在二叉樹的第i 層上有2^(i-1)個結點, 深度為k的二叉樹有2^k-1個結點的二叉樹。則此二叉樹稱為「滿二叉樹」

完全二叉樹:深度為k的二叉樹,第i (1<=i<=k-1) 層上有2^(i-1)個結點, 第k層的結點都集中在該層最左邊的若干位置上,則此二叉樹稱為「完全二叉樹」。

①在二叉樹的第i (i>0)層上至多有2i-1個結點。

②深度為k的二叉樹中至多有2k-1個結點(k>0)。

③對任何一棵二叉樹t,如果其終端結點數為n0,度為2的結點數為n2,則 n0=n2+1。

ps:在此處,可理解為度為2的結點數為0時有1個終端結點,而某個結點度加1時

就會增加乙個分支,從而使終端結點數加1。

④有n個結點的完全二叉樹的深度k為: (向下取整)log2n +1。

⑤有n個結點的完全二叉樹各結點如果用順序方式儲存,則結點之間有如下關係:

若i為結點編號則 如果i>1,則其父結點的編號為i/2;

如果2i<=n,則其左兒子(即左子樹的根結點)的編號為2i;若2i>n,則無左兒子;

如果2i+1<=n,則其右兒子的結點編號為2i+1;若2i+1>n,則無右兒子。

①建立、初始化

②求某個指定結點

③二叉樹的遍歷

(1)順序儲存

可使用順序表對完全二叉樹進行儲存,資料儲存位置和性質⑤相對應

(2)非順序儲存

①二叉鏈,定義結點,使用鏈式結構進行儲存。

②靜態二叉鏈,即建立結點陣列,左右孩子儲存陣列索引。

以三元組形式輸入 (x,p,lr) , 其中 x:data , p: x的父結點資料, lr: x是p的左孩子(l)或是右孩子(\r)。

①主建立函式

/**

* 根據乙個二維陣列,產生樹的結構

* @param a 結點資訊儲存的二維陣列

*/public void createtree(string a)

treenode movenode;

//遍歷陣列對資料進行儲存

for(int i=1; i < a.length; i++) else

} }}

②查詢父結點的函式

/**

* 遞迴遍歷樹找到父結點

* @param d 用以定位的父結點資料

* @return 父結點

*/public treenode seekfanode(string d,treenode startnode)

treenode seeknode = startnode;

if(seeknode.getdata().equals(d)) else

//遍歷右孩子

if((seeknode=seekfanode(d, startnode.getrichild()))!= null)

}//未查找到

return null;

}

③測試主函式

public static void main(string args) ,,,

};createbinary cbinary = new createbinary();

cbinary.createtree(data);

}

④我用debug檢視了變數記憶體

二叉樹之 二叉樹深度

二叉樹深度 獲取最大深度 public static int getmaxdepth treenode root 二叉樹寬度 使用佇列,層次遍歷二叉樹。在上一層遍歷完成後,下一層的所有節點已經放到佇列中,此時佇列中的元素個數就是下一層的寬度。以此類推,依次遍歷下一層即可求出二叉樹的最大寬度 獲取最大...

二叉樹(二)之二叉查詢樹

目錄 一 二叉查詢樹的概念 二 二叉查詢樹的實現 三 二叉查詢樹 binary search tree 又被稱為二叉搜尋樹。它是特殊的二叉樹 對於二叉樹,假設x為二叉樹中的任意乙個結點,x節點包含關鍵字key,節點x的key值記為key x 如果y是x的左子樹中的乙個結點,則key y key x ...

遞迴 之 二叉樹

如上圖所示,由正整數1,2,3,組成了一棵無限大的二叉樹。從某乙個結點到根結點 編號是1的結點 都有一條唯一的路徑,比如從10到根結點的路徑是 10,5,2,1 從4到根結點的路徑是 4,2,1 從根結點1到根結點的路徑上只包含乙個結點1,因此路徑就是 1 對於兩個結點x和y,假設他們到根結點的路徑...