树与二叉树

(树)Tree–ADT

树相关的定义

树是由 n ( n>=0 )个节点构成的有限集合

  • n=0 时,为空树
  • n>0 时,有且仅有一个节点称为根,而其他为互不相交的有限集,其中每个子集本身又是一棵树

Tree

根(root

没有双亲的节点 [eg. A],树可以只有一个节点

子树(孩子 | sub-tree

双亲的孩子 [eg. B C D是 A的孩子]

兄弟(sibling

拥有相同双亲的节点[eg. B C D]

叶节点( leaf

没有子树的节点

  1. 终端节点(叶节点)

    度为0的节点

  2. 非终端节点(分支节点)

    度不为0 的节点

层次( level

规定根节点的层次为0,其余节点依次递增 1 (有些版本规定根为 1)

Level

度( 边数 | degree

  1. 节点的度

节点的孩子数,或称节点有多少条边

  1. 树的度

取所有节点中最大的度

高度 ( height )

  1. 节点的高度

该节点沿着所在路径,到达最深节点(叶节点)所经过的路径长,

​ 例如 : 上图中 节点 ④ ④ 的高度为 1

  1. 树的高度

取所有节点中最大的那一个高度

​ 例如 :上图中 树的高度 为 2(根结点 ② − > ⑤ ②->⑤ >

深度 ( depth )

规定根的深度为 0

  1. 节点的深度
  • Way 1

    从根节点出发,沿着该节点所在路径寻找,直到到达该节点,期间经过的路径长 [从根到该节点的路径长]

  • Way 2

    节点所在的层次,即为该节点的深度

例如 : 上图中节点 ⑤ ⑤ 的深度为 2

  1. 树的深度
  • Way 1

    从根节点出发,到达所有叶子节点最长的路径长

  • Way 2

    最大层次数,即为该树的深度

​ 例如 :上图中树的深度为 2

归纳:一棵树的深度和高度是相等的,但树的节点(除根节点)的深度和高度未必相等


树的性质

将 度为 m 的树称为 m次树

  1. 树的节点数 = 所有节点的度数之和+1

典型分析:已知一棵度为m的树中有 n 1 n_1 n1个度为1的节点, n 2 n_2 n2个度为2的节点… n m n_m nm个度为m的节点,求该树中有多少个叶子节点?

叶子节点:度为0

所有节点的度数之和=叶子节点的度数之和+非叶子节点度数之和=非叶子节点度数之和

非叶子节点度数之和=1* n 1 n_1 n1+2* n 2 n_2 n2+3 n 3 n_3 n3+…+m n m n_m nm

叶子节点数 =树的节点数 - 非叶子节点数(度>0)

​ =1 n 2 n_2 n2+2 n 3 n_3 n3…+(m-1) n m n_m nm+1

  1. 度为 m 的树中第 i i i 层上 <至多> 有 m i − 1 m^{i-1} mi1 个节点 ( i>=1 ,即是 level 从 1 开始数)

    推广 :

    • 若某一层有 m i − 1 m^{i-1} mi1 个节点,则称该层是满的。
    • 所有叶子节点在同一层,且除该层以外的每一层都是满的,则称为 满 m 次树
    • 满 m 次树是所有相同高度的 m 次树中节点总数最多的树,即 对于 n 个节点的,构造的 m次树 为满 m次树或接近 m次树时,高度最小
  2. 高度为 h 的树 <至多> 有 m h − 1 m − 1 \frac{m^h-1}{m-1} m1mh1 个节点

典型分析:若三叉树 T 中有 244 个结点(叶结点的高度为 1 ), 则 T 的高度至少是?

三叉树:度至多为3的树

  • way 1:

前面得知:当每层都为满时,树的高度最小

则 只要求出每层的节点和 恰好大于题目所给节点即可

又 每层节点之和为 3 0 + 3 1 + 3 2 + . . . 3 h = 3 0 ( 1 − 3 h + 1 ) / ( 1 − 3 ) 3^0+3^1+3^2+...3^h=3^0(1-3^{h+1})/(1-3) 30+31+32+...3h=30(13h+1)/(13)

故 h >=6

  • way 2:

高度为 h 的树至多有 m h − 1 m − 1 \frac{m^h-1}{m-1} m1mh1 个节点

故 只需求出 h 满足在题目所给的节点即可

同样 可求出 h >=6

  1. 有 n 个节点的 m 次树 的最小的高度为 l o g m n ( m − 1 ) + 1 log_m{n(m-1)+1} logmn(m1)+1

典型分析:含有 n 个节点的 4 次树的最小高度是多少?最大高度是多少?

M i n h Min_h Minh= l o g 4 log_4 log4(3n+1)

四次树 :至少有一个节点度为 4 的树

若取 一个节点的度为 4,其它节点均为 1,那么这样的树就有最大高度

M a x h Max_h Maxh=n-4+1


树的遍历

先根遍历(preorder traversal)

  1. 先访问根节点
  2. 再自左向右访问子节点

后根遍历(postoder traversal)

  1. 先自左向右访问子节点
  2. 再访问根节点

层序遍历(level traversal)

  1. 从根节点开始,自上向下,自左向右 有序访问节点

特殊的树及相关性质

在树中的 所有 术语对于特殊的树同样适用

二叉树

  1. 有限集合
  2. 为空 或者 由一个根节点和两个互不相交的二叉树构成(子树称为 左子树 和 右子树)

BinaryTree

思考:二叉树 与 度为 2 的树的区别?

  • 度为 2 的树中至少有一个节点度为 2 ,而二叉树中没有这种要求
  • 度为 2 的树不区分左、右子树,而二叉树 严格 区分

性质:

  1. 非空二叉树的第 i 层上 至多 有 2 i − 1 2^{i-1} 2i1个节点( i >=1) 【由树的性质 2 推出】
  2. 高度为 h 的二叉树 至多 有 2 h − 1 2^{h-1} 2h1 个节点 ( h>=1 ) 【由树的性质 3 推出】

严格二叉树

  • 每个节点的 度 严格为 0 或者 2 的树

critic-tree

满二叉树 与 完全二叉树

满二叉树 :所有分支节点(非叶子节点)的度都为 2 ,且叶子节点都集中在同一层

特点:

  1. 叶子都在同一层
  2. 只有度为 0 或 2 的节点

full-tree and complete-tree

完全二叉树:

  • 在 满二叉树的基础上,对其 自上而下,自左向右 编号 (层序编号)

  • 中间不能缺失节点,即除了最下层,其他层必须填满

特点:

  1. 叶子只可能出现在最下层

  2. 最下层的叶子,自左向右 依次排列

  3. 有且仅可能有一个 度为 1 的节点,且其为左孩子

  4. 一旦出现编号 为 i 的节点为 叶子 或 只有左孩子,则编号大于 i 的节点均为 叶子

  5. 根据节点总数 n

    ​ (1) n%2 !=0, n 1 n_1 n1=0 (度为 1 的节点数为 0)

    ​ (2) n%2 ==0, n 1 n_1 n1=1

性质:

  • 在完全二叉树中,对于节点数为 n (n>=1),层序编号 为 i ( i >=1&& i<= n)的节点
  1. 当 i >** n 2 \frac{n}{2} 2n**时,为叶子节点

  2. 若 n 为奇数 ,则分支节点既有左孩子,又有右孩子

    若 n 为偶数,则编号为** n 2 \frac{n}{2} 2n**的节点只有左孩子,无右孩子,且其余 分支节点 均有左、右孩子

  • 具有 n (n>0)个节点的完全二叉树的高度为 l o g 2 log_2 log2(n+1) 或者 l o g 2 log_2 log2n + 1
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值