数据结构--树和二叉树

树和二叉树的定义

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_17,color_FFFFFF,t_70,g_se,x_16

树的定义

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_16,color_FFFFFF,t_70,g_se,x_16

树的基本术语

  • 结点:数据元素以及指向子树的分支

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_16,color_FFFFFF,t_70,g_se,x_16

  • 根节点: 飞空树种无前驱结点的结点

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_16,color_FFFFFF,t_70,g_se,x_16

  • 结点的度:结点拥有子树的个数(结点后继分支的个数)

  • 树的度:树内各结点的度的最大值。

  • 度 = 0 叶子 终端结点

  • 度 != 0 分支结点,非终端结点跟结点以外的分支结点称为内部结点

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_17,color_FFFFFF,t_70,g_se,x_16

  • 结点的祖先:从根到该结点所经分支上的所有结点。

  • 节点的子孙:以某结点为根的子树中的任一结点。

  • 树的深度:树中结点的最大层次。

  • 有序树:树中结点的各子树从左到右有次序(最左边的为第一个孩子)。

  • 无序树:树中结点的各子树无次序。

  • 森林:是m (m >= 0) 棵互不相交的树的集合

    • 把根结点删除树就变成了森林。

    • 一棵树可以看成是一个特殊的森林。

    • 给森林中各子树加上双亲结点,森林就变成了树。

    • 树一定是森林 但是 森林不一定是树

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_17,color_FFFFFF,t_70,g_se,x_16 

二叉树的定义

为何要重点研究每结点最多只有两个叉的树?

  • 二叉树的结构最简单,规律性最强

  • 可以证明,所有树都能转化为唯一对应的二叉树,不失一般性。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_17,color_FFFFFF,t_70,g_se,x_16

 

二叉树的特点

  1. 每个结点最多有两个孩子(二叉树中不存在度大于2的结点)

  2. 子树有左右之分,其次序不能颠倒。

  3. 二叉树可以是空集合,根可以有空的左子树或空的右子树

二叉树不是树的特殊情况,他们是两个概念

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_16,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_17,color_FFFFFF,t_70,g_se,x_16

案例引入

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_17,color_FFFFFF,t_70,g_se,x_16

 

树和二叉树的抽象数据类型定义

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_16,color_FFFFFF,t_70,g_se,x_16

 

二叉树的性质和存储结构

性质1:在二叉树得第i 层上至多有2^(i-1)个结点(i>=1)

  • 第i层上至少有 1 个结点

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_15,color_FFFFFF,t_70,g_se,x_16

 

性质2:深度为k的二叉树至多有 2^k - 1个结点(k> = 1)

  • 深度为 k 时至少有 k 个结点

  • watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_16,color_FFFFFF,t_70,g_se,x_16

     

 性质3:对任何一颗二叉树T,如果其叶子数为 n0,度为2的结点数为n2,则 n0 = n2 + 1

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_16,color_FFFFFF,t_70,g_se,x_16

 

性质4:具有n个结点的完全二叉树的深度为 [log2n]+1。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_17,color_FFFFFF,t_70,g_se,x_16

 

性质5:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_17,color_FFFFFF,t_70,g_se,x_16

 

两种特殊形式的二叉树

  • 满二叉树

  • 完全二叉树

他们在顺序存储方式下可以复原!

满二叉树

一棵深度为 k 且有 2^k - 1个结点的二叉树称为满二叉树。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_16,color_FFFFFF,t_70,g_se,x_16

特点:

  1. 每一层上结点数都是最大结点数(即每层都满)

  2. 叶子结点全部在最底层

    对满二叉树结点位置进行编号

    • 编号规则:从根结点开始,自上而下,自左而右

    • 每一结点位置都有元素

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_17,color_FFFFFF,t_70,g_se,x_16

 完全二叉树:

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_16,color_FFFFFF,t_70,g_se,x_16

特点:

 

  • 叶子只可能分布在层次最大的两层上

  • 对任一结点,如果其右子树的最大层次为i,则其左子树的最大层次必为 i 或 i+1

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_16,color_FFFFFF,t_70,g_se,x_16

 

二叉树的顺序存储

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_17,color_FFFFFF,t_70,g_se,x_16

// 二叉树的顺序存储结构
# define MAXSIZE 100
typedef int TElemType SqBiTree[MAXSIZE];
SqBiTree bt;

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_17,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_16,color_FFFFFF,t_70,g_se,x_16

 

二叉树的链式存储

二叉链表

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_16,color_FFFFFF,t_70,g_se,x_16

typedef int TElemType;

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

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_16,color_FFFFFF,t_70,g_se,x_16

 

 三叉链表

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_16,color_FFFFFF,t_70,g_se,x_16

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XUN~MLF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值