二叉樹的分類和比較

2021-10-19 09:41:47 字數 1522 閱讀 1147

二叉樹的分類

滿二叉樹

所有葉子節點都在同一層 所有分支節點(非葉子節點)都有左右子樹

每一層的節點個數 (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,並且左右兩個子樹也都是平衡樹。二叉搜尋樹 空樹或者二叉樹的所有節點比他的左子節點大,比他的右子節點小。紅黑樹 不...