公子姓王

导航

树 内部/外部结点 深度/高度 满二叉树/完全二叉树

最近在复习树的过程中,发现不同的教材和公开课对于树的一些基本概念定义不一,个人原来的理解也混乱;

这里对这些做一下记录,并从这些定义中选取使用更广泛或更合理的定义作为后续学习依据,避免懵逼;

node:翻译为结点还是节点?

在《数据结构与算法分析·C语言描述》一书中,将node翻译为节点;

《大话数据结构》一书中,将node翻译为结点;

浙江大学 陈越等 的《数据结构》公开课中将node翻译为结点;

参考链接:是目录树结点 还是 目录树节点????

个人觉得翻译为结点更为靠谱,当然,就如古有通假字一说,node约定俗成地翻译为节点也可,也算是中国特色吧,这点也无需特别关注;

内部结点(Branch/Internal node)外部结点(External node)

在某些教材和公开课中,经常会见到内部结点部结点的说法,但对其定义貌似都不同,让人一脸懵逼:

维基百科的定义:

内部结点:至少有一个孩子的结点,与分支结点定义相同;

Branch node/Internal node:A node with at least one child.

外部结点:也即叶子结点;有趣的是,维基百科关于外部结点的定义特地标注了不统一;

Leaf/External node (not common):A node with no children.

《大话数据结构》:

结点拥有的子树个数称为结点的度(Degree),度为0的结点为叶结点(Leaf)或终端结点;度不为0的结点称为非终端结点或分支结点;除根结点外,分支结点也称为内部结点;树的度是树内各结点度的最大值;

维基百科定义区别:认为根结点不是内部结点;

维基百科的定义更为常用,也更加合理(将根结点单独拎出来没有意义),采用之;

深度高度

这个的定义不一,可能很多人都知道:高度和深度到底是从0开始还是从1开始?这是一个问题

可以参考:树的高度于深度不一样,高度从1数起,深度从0数起,对吗?

维基百科的定义:

Level:The level of a node is defined as: 1 + the number of edges between the node and the root.

层次:1+结点到根结点的路径长度(边的个数);

Depth:The depth of a node is defined as: the number of edges between the node and the root.

深度:结点到根结点的路径长度(边的个数);

Height of node:The height of a node is the number of edges on the longest path between that node and a leaf.

高度:结点到叶结点的路径长度(边的个数);

Height of tree:The height of a tree is the height of its root node.

树的高度:根结点的高度;

按照维基百科的定义,叶子结点的高度为0;根的深度为0;除了高度(Height)这个定义外,还有一个层次(Level)的概念,根的层次为1;也就是说高度和深度均从0开始,层次从1开始;

《数据结构与算法分析·C语言描述》一书中与维基百科相同;

浙江大学公开课:

层次:规定根结点在第1层,其他任一结点的层数是其父结点的层数加1;

树的深度:树中所有结点中的最大层次;

树的高度:并没有明确提出定义,但是从习题来看,也是从1开始;

《大话数据结构》一书中也将深度与高度均定义为层次一致,从1开始;

由于国内常用,所以接受层次高度深度均从1开始的定义.但是注意区分,高度是从叶子结点开始算,而深度和层次是从根结点开始算;

满二叉树(full binary tree)和完全二叉树(complete binary tree):

参考链接:为什么说“满二叉树也是完全二叉树”?

数据结构公开课 北京大学·张铭 bilibili:

满二叉树:如果一颗二叉树的任何结点,或者是树叶,或者恰有两颗非空的子树,则此二叉树称作满二叉树;

完全二叉树:最多只有最下面的两层结点的度数可以小于2,且最下一层的结点都集中在最左边;

《大话数据结构》:

在一颗二叉树中,如果所有分支结点均存在左子树和右子树,且所有叶子结点在同一层上,这样的二叉树称为满二叉树;

对一颗具有n个结点的二叉树按层序编号,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树编号为i的结点在二叉树中位置完全相同,则这颗二叉树称为完全二叉树;

满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树;

浙江大学公开课:

完全二叉树:有n个结点的二叉树,对树中结点按从上至下、从左至右编号,编号为i(1<=i<=n)结点与满二叉树中编号为i结点在二叉树位置相同;

满二叉树:没有明确提出,但是从PPT来看,定义与《大话数据结构》中满二叉树相同;

在浙江大学的公开课中,定义其实与《大话数据结构》中的定义相同;

在国内的网上(GFW内),后面一种定义更为常用,采用之;

总结

其实上述的这些区别仅仅在于定义,对我们研究数据结构原理帮助有限,但是这些定义不一的确会给学习者带来一些理解障碍,这里做一下整理,也给自己一个明确的定义;

如果一颗树的高度是0,那么到底是空树还是只有一层的结点的树呢?

我的定义是空树,你的呢?

posted on 2018-11-08 17:03  公子姓王  阅读(4026)  评论(0编辑  收藏  举报