最近在做面试题时由于和同学对树的层,深度高度等概念理解的分歧然后 看了下Wiki对binary tree的定义,又读了一篇文章(作者 skyline0623 在文章:关于二叉树,我们的中国特色),发现关于二叉树的一些概念国内和国外定义的区别,然后整理了一下 希望可以在碰到不同情况对各种名称能正确理解文章意思。
首先贴上Wiki中对二叉树的这几种类型的定义:
1.满二叉树(full binary tree):
1.1 直接定义:除根节点以外的每个节点要么有0个要么2个节点,
1.2 递归形式的定义:
要么只有一个顶点,
要么由一个顶点和(包含)两个满二叉树作为其子树。
2.完全二叉树(complete):
除了最后一层其他每一层都是完全填满的,而最后一层从左往右依次排列。
3.完美二叉树(perfect binary tree):
所有内部节点都有两个子节点,并且所有叶节点的深度相同。
这样结合skyline0623的文章来总结一下就是:
1. 严版的对于二叉树的 层,深度,和高度均为从根=1开始往下递增,
2. CLRS的定义则是,根的深度为0,往下递增;高度从小为0递增至根;因此每个节点的高度和深度“互补” 其和为整个树的高度;且没有提到层者一概念。
3. 还有就是 国内的满二叉树其实指的是完美二叉树 而对wiki上的满二叉树没有命名;
4. CLRS中称完美二叉树为完全二叉树,称完全二叉树(二叉堆)为近似完全二叉树(nearly complete binary tree)
另外想补充一下,在其他用到二叉树结构的算法中均以国外标准来,做题时候或者讲到层的时候按照严版定义。
下面附上我整理对比的以Wiki定义为基准的几种叫法的对照表:
有错误还请批评指正,希望能帮到之前对这些定义有疑惑的朋友!数据结构与算法