数据结构——树与二叉树

概述

本章内容通常以选择题的形式考察,但不排除会有算法题涉及树的遍历


1、树的基本概念

树的定义是递归的,是一种递归的数据结构。树作为一种逻辑结构,同时也是一种分层的结构

树中的某个结点(除根结点外)最多只和上一层的一个结点(即其父节点)有直接关系;树中的每个结点与其下一层的零个或多个结点(即其子女结点)有直接关系

具有 n 个结点的树中有 n 1 条边


基本术语

祖先结点子孙结点

双亲结点孩子结点

兄弟结点

结点的度:树中一个结点的子结点个数

树中结点的最大度数称为树的度

度大于0的结点称为分支结点(或非终端结点)

度为0(没有子女结点)的结点称为叶子结点(或终端结点)

扫描二维码关注公众号,回复: 2269850 查看本文章

在分支结点中,每个结点的分支数就是该结点的度

结点的层次结点的深度结点的高度

树的高度(又称深度)是树中结点的最大层数

有序树和无序树:树中结点的子树从左到右是有次序的,不能交换,这样的树叫做有序树。有序树中,一个结点其子结点按从左到右顺序出现是有关联的。反之则称为无序树

树中两个结点之间的路径是由这两个结点之间所经过的结点序列构成的,而路径长度是路径上所经过的边数的个数

树中的分支是有向的,即路径是从上向下的。同一双亲结点的两个孩子结点之间是不存在路径的

森林 m ( m 0 ) 互不相交的树的集合

树具有如下最基本的性质(不要死记公式,自己推导更快):

  • 1、树中的结点数等于所有结点的度数加1
  • 2、度为 m i 层上至多有 m i 1 个结点
  • 3、高度为 h m 叉树至多有 ( m h 1 ) / ( m 1 ) 个结点
  • 4、具有 n m 叉树的最小高度为 [ log m ( n ( m 1 ) + 1 ) ] 向上取整

相关习题

树的路径长度是从树根到每一结点的路径长度的总和

树根到每一结点的路径的最大值应该是树的高度减1(个人觉得这个结论不对)

经常用到的性质是显而易见的,理解就可以了,不必强行记忆


2、二叉树的概念

二叉树:其每个结点至多只有两棵子树,并且二叉树的子树有左右之分,其次序不能任意颠倒

二叉树是有序树,即使树中结点只有一棵子树,也要区分它是左子树还是右子树

二叉树与度为2的有序树的区别:

  • 1、度为2的树至少有3个结点,而二叉树可以为空
  • 2、度为2的有序树的孩子结点的左右次序是相对于另一孩子结点而言的;二叉树的结点次序不是相对于另一结点而言,而是确定的

几个特殊的二叉树:满二叉树完全二叉树二叉排序树平衡二叉树

满二叉树:高度为 h ,含有 2 h 1 个结点的二叉树

满二叉树中编号(自上而下,自左向右)为 i 的结点,如果有双亲,其双亲为 i 2 向下取整),如果有左孩子,则左孩子为 2 i ,如果有右孩子,则右孩子为 2 i + 1

完全二叉树:和满二叉树相对应,其有很多有意思的性质(通过理解,自己推导)

二叉排序树:

平衡二叉树:树上任一结点的左子树和右子树的深度之差不超过1

二叉树的性质:

  • 1、非空二叉树上叶子结点数等于度为2的结点数加1,即 N 0 = N 2 + 1
  • 2、
  • 3、
  • 4、(完全二叉树)结点 i 所在层次为 log 2 i + 1 (前一个结果向下取整后加1)
  • 5、具有 N 个结点的完全二叉树的高度为 log 2 ( N + 1 ) (向上取整),上面的公式也可以用于该计算

二叉树的存储结构

顺序存储:

完全二叉树和满二叉树采用顺序存储比较合适,树中结点的序号可以唯一地反映出结点之间的逻辑关系,同时也最大可能地节省了存储空间

一般的二叉树不适合采用顺序存储结构

所有树的顺序存储结构都应该从数组下标1开始存储树中的结点(否则会带来一些问题)

对于一般二叉树来说,顺序存储结构对空间的利用率较低,因此,一般二叉树都采用链式存储结构(二叉链表)

typedef struct BiTNode{
    ElemType data;
    struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;

含有 n 个结点的二叉链表中含有 n + 1 空链域,可以利用空链域来组成线索链表


相关习题

猜你喜欢

转载自blog.csdn.net/weixin_39918693/article/details/81111985