1. 程式人生 > >二叉樹、樹和森林(java版)

二叉樹、樹和森林(java版)

什麼是樹

樹是n個結點的有限集合(n>=0);
樹只有一個根節點(root);
n>1時除了root外每個集合都是子樹;

術語

結點:包括一個數據和指向若干結點的分支。
結點的度:結點擁有子樹的個數(為0則是葉子結點)。
樹的度:樹中的最大度的結點的度數。
孩子:結點子樹的根。
雙親:結點A的子樹的根是孩子,這個結點A就是孩子是雙親。
兄弟:一個雙親的不同孩子互稱兄弟。
深度:結點最大的層次。(根為第一層)
有序樹:某結點的不同孩子的左右順序不能變換。
無序樹:某結點的不同孩子的左右順序可以變換。
森林:m棵互不相交的樹的集合。

二叉樹:

概念:

  • 每個結點最多有兩個子樹
  • 這兩個子樹左右不可互換

形態(五種):

空樹、只有根、根+左孩子、根+右孩子、根+左右孩子

滿二叉樹:

只有度為0和度為2的結點,而且每一層的葉子都是滿的

完全二叉樹:

只有度為0和度為2的結點。

性質:

1、第i層最多有2的i-1次方個結點;
2、深度為k的二叉樹最多有2的k次方減1個結點;
3、葉子有n0個、度為2的結點有n2個,那麼n0=n2+1;

2*n2+n1+1=n
n2+n1+n0=n

4、n個結點的完全二叉樹的深度為 logn2(+1
i>1,n(i)的雙親為i/2(取下整數)
2i>n,沒左孩子,2i+1>n,沒右孩子
2i<=n,左孩子為2i,2i>n,右孩子為2i+1