二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作「左子樹」(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,假設他們到根結點的路徑...