系列知识
二叉树的概念
树的概念
想想现实中的树,营养从树根出发,通过茎杆与树枝层层分岔、不断传递,最终到达树叶的。在数据结构中,树是用来概括这种传递关系的数据结构。为了简化,我们把树枝分岔处、树叶、树根都抽象成结点(node),树根为根结点(root),且对于一棵树来说最多存在一个根结点;把树叶概括为叶子结点(leaf),且叶子结点不再延伸出新的结点;把茎杆和树枝抽象成边(edge),且一条边只用来连接两个结点(一个端点一个)。这样,树就被定义成由若干个结点和若干个边组成的数据结构,且在树中的结点不能被边连接成环。在数据结构中,一般把根结点置于最上方(与现实中的树恰好相反),然后向下延伸出若干条边到达子结点(child)(从而向下形成子树(subtree)),然后以此类推,直至到达叶子结点。
下面是一些关于树比较实用的性质:
- 树可以没有结点,即空树(empty tree);
- 树的层次(layer)从根结点开始算起,即根结点为第一层,往下为第二层,以此类推;
- 把结点的子树棵树称为结点的度(degree),而树中结点最大的度被称为树的度(也称为树的宽度);
- 由于一条边连接两个结点,且树中不存在环,因此对有n个结点的树,边数一定是n-1.且满足连通、边数等于n-1的结构一定是一棵树。
- 叶子结点被定义成度为0的结点,因此当树中只有一个结点(即只有根结点)时,根结点也算作叶子结点。
- 结点的深度(depth)是指从根结点(深度为1)开始自顶向下逐层累加至该结点时的深度值;结点的高度(height)是指从最底层叶子结点(高度为1)开始自底向上逐层累加至该结点的高度值。树的深度是指树中结点的最大深度,树的高度是指树中结点的最大高度,对整棵树而言,深度与高度是相等的。
- 多棵树组合在一起称为森林(forest),即森林是树的集合。
二叉树的递归定义
二叉树的递归定义:
- 要么二叉树没有根结点,是一棵空树;
- 要么二叉树由根结点、左子树、右子树组成,且左右子树都是二叉树。
二叉树与度为2的树的区别
对树来说,结点的子树是不区分左右顺序的,因此度为2的树只能说明树中每个结点的子结点个数不超过2。二叉树虽然也满足这一点,但它的左右子树是严格区分的,不能随意交换左右子树的位置,这是最主要的区别。
特殊二叉树
满二叉树:每一层的结点个数都达到了当层能达到的最大结点数;
完全二叉树:除了最下面一层之外,其余层的结点个数都达到了当层能达到的最大结点数,且最下面一层只从左至右连续存在若干结点,而这些连续结点右边的结点全部不存在。
写在最后
从二叉树的角度来理解一下几个树的概念:
1. 层次:如果把二叉树看做家谱,层次就是辈分。如上图的满二叉树,1是爷爷,则2和3就是同一辈分的父亲与伯父,依次类推;
2. 孩子结点、父亲结点、兄弟结点、祖先结点、子孙结点:
- 一个结点的子树的根结点是它的孩子结点,它是它的孩子结点的父亲结点;
- “辈分”比自己高的是祖先结点,“辈分”比自己低的是子孙结点;
- 和自己“辈分”相同的是兄弟结点;
- 自己既是自己的祖先结点,也是自己的子孙结点。