最近在看数据结构和算法,这好多天没碰几乎全忘,搞一个看到一个完全二叉树都算了半天,网上众说纷纭啊,我还是以我的理解记录一下给我做个记忆吧,以我这记忆力指不定以后又忘了。
首先几个概念:理想二叉树,满二叉树,完全二叉树。
1)满二叉树:所有节点(除叶子)都有2个子节点,叶子节点都在一层,就是满了的意思。
2)理想二叉树:今天看到这个概念纠结了半天,还是搞不懂他和满二叉树的区别,我的理解是其所有叶子节点均在同一个高度或者深度,和满的区别就是最后一层叶子节点的最右边可以只有一个?
3)完全二叉树:这个网上定义太多了,我就是记录一下吧:
高度为K个的完全二叉树有2^k——2^(k+1)-1个节点。说到这又想到几个关于二叉树的:
二叉树的第i层节点数目最多为:2^(i-1)(i>=1)。
深度为k的二叉树至多有2^k-1个节点(i>=1)。
包含2^(k+1)-1个节点、高为k的理想二叉树的节点的高度的和为2^(k+1)-1-(k+1)。
PS:树的高度是距离叶子的路经长
树的深度距离树根的路经长,他们都可以代表一个树。
好吧。随便找了个题目算下加深一下记忆:完全二叉树有770个节点,问叶子节点有多少个?
依上面的公式:2^k-1=770,算出k=9.X,所有是10层,然根据定义,前9层是满的有2^k-1=511个节点,所有最后一层有770-511=259个节点,第九层有259/2=129.5为130个节点,所以第九层的叶子节点为2^(i-1)=256-130=126个节点+最后一层的259个节点,所有最后叶子节点为:385个。
OK,搞定!~