数据结构——树

树的基本概念

树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。没有结点的树称为空(null或empty)树。一棵非空的树包括一个根结点,还(很可能)有多个附加结点,所有结点构成一个多级分层结构。

 

树( Tree' )是 n(n~O) 个结点的有限集。 n=O 时称为空树。 在任 意-棵非空树中: ( 1 )有且仅有-个特定的称为根 ( Root )的结 点: (2) 当 n>1 时,其余结点可分为 m (m>O) 个互不相变的 有限集 T1、 T2、……、 Tm,其中每一个集合本身又是一颗树,并且称为根的子树( SubTree )
 

 

  1. n>0 时根结点是唯一的,不可能存在多个根结点,别和现实中的大树混在一 起,现实中的树有很多根须,那是真实的树,数据结向中的树是只能有一个根 结点。
  2.  m>O 时,子树的个数没有限制,但它们一定是互不相交的。

 

结点的分类

 结点拥有的子树数称为结点的度 (Degree)。度为 0 的结点称为叶结点(Leaf) 或终端结点;度不为 0 的结点 称为非终端结点或分支结点。 除根结点之外,分支结点也称为内部结点。树的度是树 内各结点的度的最大值。如下图, 因为这棵树结点的度的最大值是结点 D的度,为 3,所以树的度也为 3。 

 

 

二叉树

每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。

特点: 

  1. 每个结点最多有两个子树
  2. 左子树和右子树有顺序,次序不能颠倒
  3. 即使某个结点只有一个结点,依然有左右子树之分

 

二叉树的五种形态:

  1. 空二叉树
  2. 只有一个根结点
  3. 根结点只有左子树
  4. 根节点只有右子树
  5. 根节点既有左子树又有右子树

 

特殊的二叉树

斜树:所有结点只有左子树的称为左斜树,只有右子树的称为右斜树

满二叉树:所有结点都有左右子树,且叶子结点都再同一层

 

满二叉树特点

  1. 叶子仅仅出现在最下一层
  2. 非叶子结点度一定为2
  3. 同样深度的树中,满二叉树结点最多,为2_{k}-1

 

完全二叉树:对一棵具有 n 个结点的二叉树按层序编号,如果编号为 i (1<=i<=n) 的结点与同样深度的满二叉树中编号为 i 的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。且结点序号为连续的。

 

完全二叉树特点

  1. 叶子结点只能出现在最后两层
  2. 最下层的叶子结点只在左部连续的位置
  3. 倒数第二层的叶子结点只在右部连续的位置
  4. 如果结点的度为1,那么只有左子树
  5. 同样结点数的树中,完全二叉树深度最小

 

二叉树的性质

  1. 第i层上最多有 2^{i-1}个结点
  2. 深度为k的二叉树至多有2^{k}-1个结点
  3. 对任一一颗二叉树,若终端结点(叶子结点)数为n_{0},度为2的结点数为n_{2},则n_{0}=n_{2}+1
  4. 具有n个结点的完全二叉树的深度为 [ log_{2}(n) ] + 1

 

二叉树的遍历

 

  1. 先序遍历:根结点->左子树->右子树
  2. 中序遍历:左子树->根节点->右子树
  3. 后序遍历:左子树->右子树->根节点

(非常简单的递归就可以实现)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值