二叉树学习笔记

  1. 概念
  • 二叉树:一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点
    在这里插入图片描述

  • 满二叉树(完美二叉树): 除最下面一层全为叶节点,其他层每个节点都有两个儿子

  • 完全二叉树:对有n个结点的二叉树按从上到下,从左到右的顺序进行编号(编号为i的节点与满二叉树中编号为i节点位置相同)。如下图所示,J再满二叉树中的位置为10,K位置为11,故下列编号错误
    在这里插入图片描述

特点:(1)所有的叶结点都出现在第k层或k-l层(层次最大的两层)
(2)对任一结点,如果其右子树的最大层次为L,则其左子树的最大层次为L或L+l

一棵二叉树至多只有最下面的两层上的结点的度数可以小于2,
并且最下层上的结点都集中在该层最左边的若干位置上,则此
二叉树成为完全二叉树,并且最下层上的结点都集中在该层最
左边的若干位置上,而在最后一层上,右边的若干结点缺失的
二叉树,则此二叉树成为完全二叉树。

2.性质

  • 第i层的最大节点数为2^(i-1)
  • 深度为k的二叉树有最大节点总数为2^k - 1
  • 对任何非空二叉树,若n0表示叶结点的个数,n2时度为2的非叶节点个数,那么有n0 = n2 + 1(证明:由边数恒等关系得:1+0n0+n22 = n0+n1+n2-1)

3.抽象数据类型

  • 类型名称:二叉树
  • 数据对象集:一个有穷的节点集合;若不为空,则由根节点和其左,右二叉子树组成
  • 操作集:
    在这里插入图片描述在这里插入图片描述
  1. 存储结构

    • 顺序存储
      针对完全二叉树,如下图
      在这里插入图片描述 针对一般二叉树,如下图,但会造成空间浪费
      在这里插入图片描述
  • 链表存储
typedef struct TreeNode* BinTree;
typedef BinTree Position;
struct TreeNode{
	ElementType Data;
	BinTree Left;
	BinTree Right;
}

在这里插入图片描述在这里插入图片描述

5.错题整理:如果一个完全二叉树最底下一层为第六层(根为第一层)且该层共有8个叶结点,那么该完全二叉树共有多少个结点?39
解:由题意得,前五层构成满二叉树,即前五层的节点数为1+2+4+8+16=31(即2的5次方-1),最后再加上8个叶节点为39
错题整理:已知一棵 完全二叉树 的第6层(设根为第1层)有8个叶结点,则该完全二叉树的结点个数最多是:111
解:由完全二叉树的特点可知出现节点的层数为最后一层或倒数第二层,则求节点个数最多知有7层,故前6层为满二叉树,有63个节点,而第6层有8个叶节点,即这8个没有儿子,第6层还有32-8=24个,则第七层有242个叶节点,共有63+242=111个

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值