【二叉树的性质与存储结构】

1.特殊的二叉树

1.1满二叉树

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

  • 每一层上的结点数都是最大结点数(即每层都满)
  • 叶子结点全部在最底层
  • 满二叉树在同样深度的二叉树中结点个数最多
  • 满二叉树在同样深度的二又树中叶子结点个数最多

编号原则

  • 每一结点位置都有元素
  • 根结点开始自上而下,自左而右

1.2完全二叉树(一一对应)

在这里插入图片描述
实例如下:
在这里插入图片描述

  • 核心1:在满二叉树中,从最后一个结点开始连续去掉任意个结点,即是一棵完全二叉树.
  • 核心2满二叉树一定是完全二叉树完全二叉树不一定是满二叉树

特点:
在这里插入图片描述

1.3斜树(了解即可,本质就是线性结构)

左斜树:所有的结点都只有左子树的二叉树
右斜树:所有的结点都只有右子树的二叉树

2.二叉树的相关性质

2.1性质1(某层结点数,max)

在这里插入图片描述
在这里插入图片描述
注意第i层上至少有1个结点
(如果1个结点都没有,就不可能有这么多层了)
证明
在这里插入图片描述

2.2性质2(整树结点数,max)

在这里插入图片描述
注意:深度为k时至少有k个结点
(深度为k,每一层上至少有1个结点,总共k个结点)
证明
在这里插入图片描述

2.3性质3(叶子结点数 与 度为2的结点数)

分析过程为重
在这里插入图片描述
证明
在这里插入图片描述
在这里插入图片描述

2.4性质4(通过结点数 求 完全二叉树的深度)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
证明:
在这里插入图片描述

2.5性质5(双亲 与 孩子结点的编号关系)

如果对一颗有n个结点的完全二叉树(深度为 [log2n]+1 )
结点按层序编号(从第1层到第 [log2n]+1层,每层从左到右),
则对任一结点i(1≤n),有:
在这里插入图片描述
示例:
在这里插入图片描述

3.二叉树的存储结构

在这里插入图片描述

3.1二叉树的顺序存储结构(用数组存储)

(适合满二叉树,完全二叉树)

3.1.1顺序存储规则:

满二又树的结点层次形式编号依次存放二叉树中的数据元素
例1:
在这里插入图片描述
例2:
在这里插入图片描述

3.1.2通过存储表画出二叉树

(1)先画出对应深度的满二叉树,并标号
(2)通过存储表中的序号进行元素填入,得到对应的二叉树

在这里插入图片描述

3.1.3顺序存储的缺点

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

3.2二叉树的链式存储结构

3.2.1链式存储图解

在这里插入图片描述

3.2.2代码如下:(二叉链表)

#include<stdio.h>
#include<stdlib.h>

typedef int TElemType;//树中元素基本类型

//二叉树结点链式存储结构(二叉链表)
typedef struct BiNode
{
	TElemType data;//数据域
	struct BiNode* lchild, * rchild;//左,右孩子指针
}BiNode,*BiTree;
//BiNode:用来定义结点类型
//BiTree:用来定义树类型

在这里插入图片描述

3.2.3特性

在n个结点的二叉链表中,有n+1个空指针域
分析:
在这里插入图片描述

3.2.4三叉链表(添加了一个指向双亲的指针域)

更便于访问双亲结点
在这里插入图片描述
代码如下:

#include<stdio.h>
#include<stdlib.h>

typedef int TElemType;//树中元素基本类型

//二叉树结点链式存储结构(三叉链表)
typedef struct TriTNode
{
	TElemType data;//数据域
	struct TriNode* lchild, * parent,* rchild;//左孩子,双亲,右孩子指针
}TirNode, * TirTree;
//TirNode:用来定义结点类型
//TirTree:用来定义树类型
  • 19
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值