树、二叉树、森林的一些性质与操作

关于树的一些概念和术语,有位博主写的很好,可以点下面的链接去看一下
我是链接

二叉树的性质

  1. 在二叉树的第i层上至多有2j-1个结点(i>=1)
  2. 深度为k的二叉树至多有2k-1个结点(k>=1)深度为k时至少有k个节点
  3. 对任何一棵二叉树T,如果其叶子数为n0,度为2的节点为n2,则n0=n2+1
  4. 具有n个结点的完全二叉树的深度为[log2n]+1([log2n]代表向下取整),例如有12个结点的完全二叉树的深度为[212]+1=3+1=4
  5. 如果对一棵有n个结点的完全二叉树(深度由性质4可知,为[log2]+1)的每一点进行编号(即从第1层到第[log2]+1,每层从左到右的顺序),则对任一结点i(1<=i<=n)有:
    (1). 如果i=1,则结点为根,无双亲,如果i>1,则其双亲结点为[i/2]
    (2).如果2i>n,则结点i为叶子结点,无左孩子,否则,其左孩子是结点2i
    (3).如果2i+1>n,则结点i无右孩子,否则,其右孩子是结点2i+1

满二叉树
一棵深度为k具有2k-1个结点的二叉树称为满二叉树
特点:

  1. 每一层上的结点数都是最大结点数
  2. 叶子结点全部在最底层

完全二叉树
深度为k的具有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中遍号为1-n的结点一一对应时,称之为完全二叉树
特点:

  1. 叶子只可能在层次最大的两层上
  2. 对任一结点,如果其右子树的最大层次为i, 则其左子树的最大层次必为i或i+1

将树转换为二叉树

  1. 加线,在兄弟之间加连线
  2. 抹线,除左孩子(长子)外,去除结点与其他孩子之间的连线
  3. 旋转,以树的根结点为中心,顺时针旋转45o

将二叉树转为树

  1. 加线,若p结点是双亲结点的左孩子,则将p的右孩子,以及右孩子的右孩子…沿分支找到的所有右孩子,都与p用线连起来
  2. 抹线,将抹掉原二叉树中双亲与右孩子之间的连线
  3. 调整,将结点按层次排列,形成树结构
    可总结为:左孩右右连双亲,去掉原来右孩线

将森林转为二叉树

  1. 将各棵树分别转换成二叉树
  2. 将每棵树的根节点用线相连
  3. 以第一棵树结点为二叉树的根,再以根节点为轴心,顺时针旋转构成二叉树
    可总结为:树变二叉根相连

二叉树变为森林

  1. 抹线,将二叉树中根结点与其右孩子,以及右孩子的右孩子…的连线全部抹去,使之变为孤立的二叉树
  2. 还原,将孤立的二叉树还原成树
    可总结为:去掉原来右孩线,孤立二叉再还原

二叉树的遍历

  1. 先序遍历
  2. 中序遍历
  3. 后续遍历
  4. 层次遍历

树的遍历(普通树的孩子结点可能有多个,中序遍历无法确定先遍历哪个孩子,后遍历哪个孩子,所以普通树无中序遍历)

  1. 先序遍历
  2. 后序遍历
  3. 层次遍历

森林遍历

将森林看作3部分组成:

  1. 第一棵树的根节点
  2. 第一棵树的子树森林
  3. 其他树构成的森林

则森林的遍历有:

  1. 先序遍历:先遍历部分1,再遍历部分2,最后遍历部分3
  2. 中序遍历:先遍历部分2,再遍历部分1,最后遍历部分3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值