二叉樹的分類
滿二叉樹
所有葉子節點都在同一層 所有分支節點(非葉子節點)都有左右子樹
每一層的節點個數 (i表示層數) 2^(i-1)個節點
對於深度為h的樹,共有節點 2^h - 1
所有的子節點都向乙個方向傾斜,只分叉出左子樹或右子樹
完全二叉樹
對於高度/深度為h的二叉樹而言,h-1層都是滿的,h層節點在左側連續排列,空位都在右側。
滿二叉樹一定是完全二叉樹,反之未必。
1) 父節點就是 k/2
2) 如果有孩子節點,先有左孩子 2k,後有右孩子 2k+1
【構造出完全二叉樹】
// 0 1 2 3 4
// 2k+1 2k+2
private static int array = ;
// 儲存生成的節點
private static listnodelist = new linkedlist<>();
public static treenode createtree()
// 構造節點之間的關係
for (int i = 0; i < nodelist.size() / 2; i++)
}return nodelist.get(0);
}
【相同的樹】
相同的樹如何判斷是否相同?給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。
如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。
示例 1:
輸入: 1 1
/ \ /
2 3 2 3
[1,2,3], [1,2,3]
輸出: true
示例 2:
輸入: 1 1
/ 2 2
[1,2], [1,null,2]
輸出: false
示例 3:
輸入: 1 1
/ \ /
2 1 1 2
[1,2,1], [1,1,2]
輸出: false
1)兩棵樹,如果有左右子樹,樹a的左子樹樹b的左子樹,同時樹a的右子樹樹b的右子樹
2)如果兩棵樹都是空,是相同的
3)如果一棵為空,一棵不為空,是不同的
4)如果數值不同,也是不同的
public boolean issametree(treenode p, treenode q)
if (p == null || q == null)
if (p.val != q.val)
// 遞迴規律
return issametree(p.left, q.left)
&& issametree(p.right, q.right);
}
分類 二叉樹
二叉樹前序遍歷 遞迴 void preorder1 bintree root 遞迴前序遍歷 二叉樹前序遍歷 非遞迴 void preorder2 bintree root 非遞迴前序遍歷 if s.empty 二叉樹中序遍歷 遞迴 void inorder1 bintree root 遞迴中序遍歷 ...
二叉樹分類
二叉樹分類 滿二叉樹 對於國內的滿二叉樹 從圖形形態上看,滿二叉樹外觀上是乙個三角形。從數學上看,滿二叉樹的各個層的結點數形成乙個首項為1,公比為2的等比數列。對於國外的滿二叉樹 滿二叉樹的結點要麼是葉子結點,度為0,要麼是度為2的結點,不存在度為1的結點。完全二叉樹 設二叉樹的深度為h,除第 h ...
二叉樹的分類
二叉樹的分類 滿二叉樹 從高到低,除了葉節點外,所以節點左右節點都存在。完全二叉樹 比滿二叉樹少幾個葉節點,從左向右放子節點。平衡二叉樹 空樹或者它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹也都是平衡樹。二叉搜尋樹 空樹或者二叉樹的所有節點比他的左子節點大,比他的右子節點小。紅黑樹 不...