二叉樹是有限個數的集合,該集合或者為空,或者有乙個稱為根元素以及兩個不相交的,被分別稱為根的左子樹和右子樹的二叉樹組成。
相關概念:
深度:樹中結點的最大層數稱為樹的深度。
結點的度:結點所擁有的子樹的個數稱為該結點的度。
葉節點:度=0的節點。
滿二叉樹:乙個二叉樹的每一層結點個數都達到了最大,即為滿二叉樹。
樹的度:樹中各結點的最大值。
一顆深度為k的有n個結點的二叉樹,對其結點按從上自下,從左到右的順序進行編號,如果編號i(1<=i<=n)的結點和滿二叉樹中編號為i的結點在二叉樹中的位置相同,就稱為完全二叉樹。
如下:
二叉樹的主要性質:
1.一顆非空二叉樹的第i層上最多有2^(i-1)個結點。
2.一顆深度為k的二叉樹中,最多具有2^(k-1)個結點。
3.一顆非空二叉樹,如果葉子結點數為n,度數為2的結點數為x,則有:n=x+1;
4.具有n個結點的完全二叉樹的深度為(log2n)+1。(2在下方)
二叉樹的遍歷:
二叉樹的遍歷分為三種:
先序遍歷,中序遍歷,後序遍歷
先序遍歷: (根左右)
前序遍歷首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。在遍歷左、右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。
若二叉樹為空則結束返回,否則:
(1)訪問根結點。
(2)前序遍歷左子樹。
(3)前序遍歷右子樹 。
中序遍歷:(左根右)
中序遍歷首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。在遍歷左、右子樹時,仍然先遍歷左子樹,再訪問根結點,最後遍歷右子樹。即:
若二叉樹為空則結束返回
否則:
(1)中序遍歷左子樹。
(2)訪問根結點。
(3)中序遍歷右子樹。
後序遍歷:
後序遍歷首先遍歷左子樹,然後遍歷右子樹,最後訪問根結點,在遍歷左、右子樹時,仍然先遍歷左子樹,然後遍歷右子樹,最後遍歷根結點。即:
若二叉樹為空則結束返回
否則:
(1)後序遍歷左子樹
(2)後序遍歷右子樹
(3)訪問根結點
例子,給定乙個二叉樹,分別進行三種不同的遍歷:
先序遍歷結果:
a b c d e f g h i j
中序遍歷結果:
b c d a f e h j i g
後續遍歷結果:
d c b j f j i h g a
下面給出**:
二叉樹類
主方法:public
class binarytree
else
}//供給外部類進行呼叫
public
void
display()
}//節點內部類
class node
//新增節點方法,左孩子小於父親節點,右孩子大於等於父親節點
public
void
addnode(int data)
else
}else
else }}
}public
void
xiandisplay()
if (this.rightchild!=null)
}//輸出接點,中序遍歷輸出結果,左根右,
public
void
zhongdisplay()
system.out.print(this.data+" ");
if (this.rightchild!=null)
}public
void
houdisplay()
if (this.rightchild!=null)
system.out.print(this.data+" ");}}
}
public
class binarytreedemo
}
java資料結構 二叉樹
樹是一種特殊的資料結構,他可以用來描述有分支的結構是由乙個或者乙個以上的有限集合組成,具有兩個屬性 一是存在乙個特殊的節點,成為樹根 二是其餘節點分為n 0個互斥集合,t1,t2,t3,tn,每個集合成為子樹。常用屬性如下 1 根節點 根節點是乙個沒有雙親結點的結點,一棵樹中最多有乙個根節點。2 結...
java 資料結構 二叉樹遍歷
前言 前序,中序和後序遍歷都是深度優先遍歷的特例 深度優先和廣度優先是針對普通樹的,但是先序,中序和後序都是針對二叉樹的。使用遞迴和迭代 借用棧 實現二叉樹先序,中序,後序遍歷 definition for a binary tree node.public class treenode 1.二叉樹...
Java資料結構之二叉樹
樹的定義 樹是一種由邊連線著結點的資料結構,資料模型上的樹可以看做是一棵倒掛的樹木,有乙個主幹,下面是枝幹 樹葉。樹的資料結構模型如下 節點 上圖的圓圈,比如a b c d等都是表示節點,節點裡面包含了儲存的資料以及指向其它節點的位址引用。邊 連線節點的線稱為邊,邊表示節點的關聯關係。一般從乙個節點...