【数据结构与算法】二叉树

本文总结了二叉树的性质,包括满二叉树和完全二叉树的特点,以及它们的深度和结点数量的关系。讨论了二叉树的顺序和链式存储结构,以及遍历二叉树的顺序(DLR、LDR、LRD)、非递归算法和层次遍历。此外,还提及二叉树在实际应用中的场景,如构建、复制、计算深度和叶子结点数量等。
摘要由CSDN通过智能技术生成

对二叉树内容做以下总结:

二叉树的性质

性质1:在二叉树的第i层上至多有2^(i-1)个结点(i≥1)。
性质2:深度为k的二叉树至多有
2^(k)-1
个结点。(k≥1)。
性质3:对任何一颗二叉树T,如果其叶子数为n0,度为2的结点数为n2,则n0=n2+1。

满二叉树:一颗深度为k且有2^(k)-1个结点的二叉树称为满二叉树。
特点:1.每一层上的结点数都是最大节点数(即每层都满)
2.叶子结点全部在最底层。
完全二叉树:深度为k的具有n结点的二叉树,当且仅当其中每一个节点都与深度为k的满二叉树编号为1-n的结点一一对应,称之为完全二叉树。
特点:1.叶子只可能分布在层次最大的两层上。
2.对任一结点,如果其右子树的最大层次为i,则其左子树的最大层次必为i或i+1。

完全二叉树性质:
性质4:具有n个结点的完全二叉树的深度为[log2^(n)]+1。
性质5:如果对一颗有n个结点的完全二叉树(深度为[log2^n]+1)的结点按层序编号(从第1层到第[ log2 ^(n) ] +1,每层从左到右),则对任一结点i(1≤i≤n),有:
1)如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是结点[i/2]。
2)如果2i>n,则结点i为叶子结点,无左孩子;否则其左孩子是结点2i。
3)如果2i+1>n,则结点i无右孩子;否则其右孩子是结点2i+1。

二叉树的顺序存储(适合于满二叉树和完全二叉树)

//二叉树顺序存储表示
#define MAXISIZE 100
Typedef TElemType SqBiTree[MAXSTIZE]
SqBiTree bt;

二叉树顺序存储缺点:
**最坏情况:**深度为k的且只有k个结点的单支树需要长度为(2^k)-1的一维数组。

二叉树的链式存储结构

typedef struct BiNode{
   
TElemType data;
struct BiNode *lchild,*rchild;   //左右孩子指针
}BiNode,*BiTree

在n个结点的二叉链表中,有n+1个空指针域。

遍历二叉树
DLR——先(根)序遍历
LDR——中(根)序遍历
LRD——后(根)序遍历

  • 若二叉树中各结点的值均不相同,则二叉树结点的先序序列、中序序列和后序序列都是唯一的。
  • 由二叉树的先序序列和中序序列或由二叉树的后序序列和中序序列可以确定唯一一颗二叉树。(先后序定根,中序定左右)

先序遍历算法实现

Status PreOrderTraverse(BiTree T){
   
	if(T==NULL) return OK;//空二叉树
	else{
   
		visit(T);  //访问根结点
		PreOrderTraverse(T->lchild);   //递归遍历左子树
		PreOrderTraverse(T->rchild);      //递归遍历右子树
		}
	}

中序遍历算法实现

Status InOrderTraverse(BiTree T){
   
	if(T==NULL) return OK;//空二叉树
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值