【数据结构】二叉树

文章详细介绍了二叉树的基本概念,包括其结构特性,如满二叉树和完全二叉树的定义,以及二叉树的性质。接着讨论了链式结构在实现二叉树中的应用,并列举了深度优先遍历(前序、中序、后序)和广度优先遍历(层序遍历)等遍历方法。

二叉树概念及结构

  • 二叉树每个结点最多有两颗子树
  • 二叉树的子树有左右之分,即二叉树是有序树
  • 二叉树由根节点和左右子树构成(子树又可看成一个二叉树,由此可分治)

 
特殊的二叉树:

  • 满二叉树:每一层结点数都为最大,若层数为k,则结点数为 2^k - 1
  • 完全二叉树:一个h层二叉树,前h-1层为满,最后一层不满且最后一层的结点从左至右连续
  • 在这里插入图片描述

 

性质:

  • 深度为h的二叉树最多有2^h-1个结点
  • 第 i 层最多有 2^(i-1) 个结点
  • 度为 0 的结点数为 n0,度为 2 的结点数为 n2,则 n0 = n2 + 1 (对于所有二叉树成立)
  • N 个结点的满二叉树的深度 h = log2N + 1
  • n 个结点的完全二叉树,按照堆实现顺序,将所有结点从 0 开始编号, 则对于序号为 i 的结点有:
    • 若i>0,i位置节点的双亲序号:(i-1)/2;i=0,i为根节点编号,无双亲节点
    • 若2i+1<n,左孩子序号:2i+1,2i+1>=n否则无左孩子
    • 若2i+2<n,右孩子序号:2i+2,2i+2>=n否则无右孩子
       

性质列题:
在这里插入图片描述
解析:完全二叉树中,有n0 = n2 + 1
再根据题设条件,得n0 + n1 + n2 = 2n
则可得:2n0 + n1 - 1 = 2n
完全二叉树中,n1只能为0或1,由于2n为偶数,故n1 = 1
因此,n0 = n
 

二叉树链式结构实现

链式二叉树结构定义

typedef struct BTNode
{
	char data;
	struct BTNode* left;
	struct BTNode* right;
}BTNode;

二叉树是由根结点和左右子树构成的,即是递归式的,故后续基本操作基本都为递归操作(对左右子树分治)

 

二叉树的遍历

遍历方式:前序、中序、后序、层序
 
深度优先遍历:

  • 前序遍历:先访问根结点,在分别遍历左右子树
  • 中序遍历:先遍历左子树,再访问根结点,后遍历右子树
  • 后序遍历:先遍历左子树,再遍历右子树,后访问根结点
  • 在这里插入图片描述

 

广度优先遍历:

  • 层序遍历:自上而下、从左至右逐层访问树的结点的过程
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值