二叉樹、樹和森林(java版)
阿新 • • 發佈:2019-02-07
什麼是樹
樹是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個結點的完全二叉樹的深度為
i>1,n(i)的雙親為i/2(取下整數)
2i>n,沒左孩子,2i+1>n,沒右孩子
2i<=n,左孩子為2i,2i>n,右孩子為2i+1