数据结构导论之树与二叉树

本文介绍了树的基本概念,包括树的定义、结点的度、层次和高度等。深入讨论了二叉树的特性,阐述了顺序存储和链式存储两种方式,并详细说明了树的遍历方法,包括先序、中序、后序和层次遍历。此外,还提及了树与二叉树之间的转换以及哈夫曼树的构建和编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.概念
树是n(n>=0)个结点的有限集合,一棵树满足以下两个条件:
(1)当n=0时,称为空树;
(2)当n>0时,有且仅有一个称为根的节点,除了根节点外,其余结点为m(m>=0)个互不相交的非空集合,称为根的子树。
叶子:度为0的结点称为叶子或者终端结点。(也就是说没有孩子)
结点的度:树上任一结点所拥有的子树的数目称为该节点的度。
结点的层次:从根开始算起,根的层次为1,其余结点的层次为其双亲的层次+1
树的度:一棵树中所有结点的度的最大值称为该树的度。
树的高度:一棵树中所有结点层次数的最大值称为该树的高度或者深度。
2.二叉树
概念:
n(n>=0)个元素有限集合,该集合或者为空,或者由一个根以及两棵互不相交的左子树和右子树组成,其中左右子树也是二叉树。二叉树的任一结点都有两棵子树(任一可以为空子树),并且这两棵子树之间有次序关系,如果互换了位置,就是不同的二叉树,左子树为左孩子,右孩子同理。
这里写图片描述

性质:

这里写图片描述
这里写图片描述

3.二叉树的存储结构(顺序存储和链式存储)
顺序存储:可以用一维数组表示,二叉树上的结点按某种次序分别存入该数组的各个单元中。完全二叉树的顺序存储如下图所示:
这里写图片描述
非完全二叉树的顺序存储如下所示:
这里写图片描述
这里写图片描述
这里写图片描述
链式存储:
最常用的是二叉链表和三叉链表
这里写图片描述
4.树的存储结构:
(1)孩子链表表示法:
这里写图片描述
带双亲的孩子链表中,双亲的编号为孩子编号-1
这里写图片描述

(2)孩子兄弟链表表示法:(结构和二叉链表很相似)
这里写图片描述

这里写图片描述
(3)双亲表示法:
这里写图片描述

4.树、森林与二叉树的关系

  • 树转换成二叉树(兄弟连接,长兄为父)
    这里写图片描述
  • 森林转换成二叉树 (兄弟连接,长兄—最左边的结点为父)
    这里写图片描述

  • 二叉树转换成森林(断开根节点与右孩子的连线,转换成兄弟)
    这里写图片描述

5.遍历(树和森林)
(1)先序遍历(DLR):先访问根结点,然后遍历左子树,右子树。顺序为从上到下, 从左到右。
(2)中序遍历(LDR):先遍历左子树,访问根结点,右子树。顺序为从左到右。
(3)后序遍历(LRD):先遍历左子树,右子树,访问根结点。顺序为从左到右,只要有孩子的都要先遍历孩子,最后是父母(根结点)。
(4)层次遍历:从二叉树的根结点这一层开始,逐层向下遍历,在每一层按照从左到右的顺序对结点逐个访问。
6.判断树和哈夫曼树
建造哈夫曼树:权值最小的两个数依次构造二叉树,每2个数构造一次,多出一个新结点,所以哈夫曼树中共有2n-1个结点。
哈夫曼编码:从上到下,从左到右,0和1依次编码。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值