一、概述
为什么要使用二叉树呢?比如我们在使用数组的时候,添加数据和删除数据 都会大量的进行数据移动,从而减少了程序的性能。在我们使用链表的时候,如果要查找一个节点,因为需要找到根节点或者尾节点然后一个节点一个节点的往下寻找,相对也会很慢。二叉树的优点有很多,因为结构有序。比如面对大量数据的时候,查找节点的速度非常快。而且他也吸收了链表的优点,删除和添加节点也和链表一样。二叉树结合了数组和链表的优点,那么什么是二叉树呢?在讨论二叉树之前,我们先讨论一下什么是树。二、什么是树?
树由边连接的节点组成。在计算机的世界里,一个节点代表一个实体, 比如一个人,一个汽车零件等等。树的顶点总有一个节点,它通过连接第二层的多个节点,然后第二层连向更多的节点。依次类推,所以树的顶部小,底部大
三、树的术语
很多树的术语可以描述树的各个部分。为了让后面的二叉树更容易理解,需要知道一些树的术语。
- 路径:从一个节点到另一个节点,所经过的节点顺序就叫做路径。
- 根:树顶端的节点称为根。一棵树只有一个根节点。从跟到任意一条节点都必须有一条路径(且至仅有一条)。
- 父节点:每个节点(除了根)都恰好有一条边向上连接到另一个节点。上面这个节点称为下面节点的“父节点”。
- 子节点:每个节点都可能有一条或多条向下连接其他节点。下面这些节点就称为他的“子节点”。
- 叶节点:没有子节点的节点称为“叶子节点”或简称“叶节点”。树中只有一个根,但是可以有很多叶节点。
- 子树:每个节点都可以作为“子树”的根,它和它所有的子节点,子节点的子节点都含在子树中,就像家族中那样,一个节点的子树包含它所有的子孙。
- 层:一个节点的层数是指从根开始到这个节点有多少“代”。假设根是第0层,他的子节点就是第一层,他的孙节点就是第二层,以此类推。
- 深度和高度:高度就是从节点X到叶节点最长简单的路径中边的个数。深度就是从根节点往下到节点的所在的层数。比如节点B,他的高度是4,深度为2.
- 节点的度:一个节点所拥有的子树的个数称为节点的度
四、二叉树
二叉树是一种特殊的树,二叉树节点的子节点最多只能有两个。位于节点左边的节点称为左子树,位于节点右边的节点称为右子树。按照这样的规则,二叉树伸延出了5个性质。在这里我们详细了解一下,
性质一:二叉树中第I层最多有2^(i-1) 个节点,其中I>=1.比如下图,第一层 只有一个节点,第二层有2个节点,第三层有4个节点。
性质二:深度为K的二叉树,至多有2^K-1个节点。比如上图中,由于它是满二叉树,并且它的深度为3,那么根据性质二,那么它有7个节点。
性质三: 二叉树中,终端结点个数
与度为2的结点个数
有如下关系-------
=
+ 1。
![](https://img-my.csdn.net/uploads/201301/16/1358295783_6019.jpg)
![](https://img-my.csdn.net/uploads/201301/16/1358295803_5476.jpg)
![](https://img-my.csdn.net/uploads/201301/16/1358295818_8450.jpg)
![](https://img-my.csdn.net/uploads/201301/16/1358295835_1492.jpg)
性质四:在二叉树中,节点为n 的完全二叉树,至少有【log2(N)】+1的深度。
性质五:在按层序编号的n个节点完全二叉树中,任意一个节点I(1<=i<=N)有:
- 如果I=1,那么他是根节点,否则(i>1),任意节点的双亲为ii/2(向下取整),例如5的双亲节点为2.6的双亲节点为3.
- 如果2I>N,那么I节点,没有左子树,否则,他的左子树为2I。
- 如果2i+1>n,这个节点没有右子树,否则,他的右子树为2I+1.