树是另一种存储结构。跟之前说的线性结构不同,树是一种一对多的数据结构。
这里的树跟现实中的大树很像,有根有叶。但是现实的大树根部有很多根须,而这里的树只有一个根结点。
看图说话,了解下常用到的术语:
有了树的概念,二叉树就好理解了。首先它得是树,上述的图其实就是个二叉树。
不过要注意的是,二叉树不一定非得有2个叉,每个结点最多有2个子结点的就是二叉树,其中又分左结点和右结点。
该二叉树所有结点都存在左子树和右子树,并所有叶结点都在最后一层,看起来很完美。
这里结点的总数=2^n-1,n是层数。
它的描述是这样的:对于一颗具有n个结点的二叉树按层序编号,
如果编号为i(1<=i<=n)的结点与同样深度的满二叉树中编号为i的结点
在二叉树中位置完全相同,那么这棵树就是完全二叉树。
说实话,这段描述咋一看有点绕,我初次看理解了好久(太笨了),现在我来描述下帮助理解。首先关注2个点:
1 满二叉树
2 按层序编号
这里直接参考上述的满二叉树的图。编号,就是我们给它的假想编号,就按照从上到下,从左到右来一次排序,图中是
A~O。
完全二叉树
结合示意图可以看出,右图存在的所有结点的编号,都与左边的满二叉树中的结点位置一一对应。所以,右图就是完全二叉树。
非完全二叉树
右图的二叉树中J结点实际是不存在的,未了示意用。你可以在心中给右侧图按照满二叉树进行编号,但是发现到J结点断掉了,
因为此结点不存在,编号不连续了,所以就不是完全二叉树。
接下来,就准备二叉树的遍历了。
原文:https://www.cnblogs.com/pingguo-softwaretesting/p/14587752.html