定義

樹(Tree)是n(n>=0)個結點的有限集。n=0時稱為空樹。在任意一顆非空樹中:
有且僅有一個特定的稱為根(root)的結點;
當n>1時,其余結點可分為m(m>0)個互補交互的有限集T1、T2…Tm,其中每一個集合本身又是一棵樹,並稱為根的子樹(SubTree)。

二叉樹是另一種樹形結構,其特點是每個結點至多只有兩顆子樹(即二叉樹中不存在度大於2的結點),並且,二叉樹的子樹有左右之分,其次序不能任意顛倒。
與樹相似,二叉樹也以遞歸的形式定義。二叉樹是n(n≥0)個結點的有限集合:
①或者為空二叉樹,及n=0。
②或者由一個根結點和兩個互不相交的稱為根的左子樹和右子樹組成。左子樹和右子樹又分別是一棵二叉樹。
二叉樹有五種不同的基本形態: A:空二又樹 B:只有一個根結點的二叉樹 C:右子樹為空的二叉樹 D:左子樹為空的二叉樹 E:左、右子樹都非空的二叉樹
結構
數組和鏈表都可以用來表示二叉樹,當然如果你想,字符串也可以用來表示樹。
我們還可以自己定義二叉樹的數據結構,比如
@Data
public class Tree {
private Tree left;
private Tree right;
private String value;
}
應用
二叉搜索樹
二叉搜索樹是一種節點值之間具有一定數量級次序的二叉樹,對於樹中每個節點:
若其左子樹存在,則其左子樹中每個節點的值都不大於該節點值;
若其右子樹存在,則其右子樹中每個節點的值都不小於該節點值。
紅黑樹
R-B Tree,全稱是Red-Black Tree,又稱為“紅黑樹”,它一種特殊的二叉查找樹。紅黑樹的每個節點上都有存儲位表示節點的顏色,可以是紅(Red)或黑(Black)。
紅黑樹的特性:
(1)每個節點或者是黑色,或者是紅色。
(2)根節點是黑色。
(3)每個葉子節點(NIL)是黑色。 [注意:這里葉子節點,是指為空(NIL或NULL)的葉子節點!]
(4)如果一個節點是紅色的,則它的子節點必須是黑色的。
(5)從一個節點到該節點的子孫節點的所有路徑上包含相同數目的黑節點。
遍歷
二叉樹的遍歷
void traverse(TreeNode root) {
traverse(root.left)
traverse(root.right)
}
