数据结构[树形结构和森林]二叉树、

Author:JaneOnly300
Date:2021:12.6
Categories: 数据结构(专升本)
本章参考王卓数据结构与算法基础

树结构和森林

一、树的定义

树形结构(非线性结构),结点之间有分支,具有层次关系。
![image.png](https://img-blog.csdnimg.cn/img_convert/0b04ef0cc7ca33c3562321da3cd02a6e.png#clientId=u750c423a-8f30-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=174&id=u18704364&margin=[object Object]&name=image.png&originHeight=674&originWidth=1280&originalType=binary&ratio=1&rotation=0&showTitle=false&size=215641&status=done&style=none&taskId=u67ab8239-5097-42b1-9d2a-d9078ca8602&title=&width=330)

树的定义

树是有n个结点的有限集合

  • 若n=0为空树
  • 若n>0,则他满足如下的两个条件
    1. 有且仅有一个特定的根结点
    2. 其余的结点可以分为m个不互相叫的有限集,每个集合本身有事一颗树,并且称为根的子树(su Tree)。

![image.png](https://img-blog.csdnimg.cn/img_convert/2a81d1a6c4c7268256ed2e96271c3ab9.png#clientId=u750c423a-8f30-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=182&id=u78fd6cd7&margin=[object Object]&name=image.png&originHeight=648&originWidth=1072&originalType=binary&ratio=1&rotation=0&showTitle=false&size=210293&status=done&style=none&taskId=ud1dd2fb6-cd34-436d-9fea-00a7699db53&title=&width=301)
![image.png](https://img-blog.csdnimg.cn/img_convert/31b749a0f674c094afd5d0d8b998c85c.png#clientId=u750c423a-8f30-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=230&id=u307c49f7&margin=[object Object]&name=image.png&originHeight=460&originWidth=460&originalType=binary&ratio=1&rotation=0&showTitle=false&size=91552&status=done&style=none&taskId=u58d1e849-3f5c-4b26-9088-47638075a44&title=&width=230)

它是一个递归嵌套的定义.

树的基本术语

  • 根节点(无前驱结点)
  • 结点的度
    • 就是结点拥有的子树个数
  • 树的度
    • 就是所有节点度的最大值
  • 叶子
    • 就是度=0
  • **分支节点 **
    • 度!=0

![image.png](https://img-blog.csdnimg.cn/img_convert/71bda182c83a2e88cbdd35ef57393266.png#clientId=u750c423a-8f30-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=698&id=uc0aa853d&margin=[object Object]&name=image.png&originHeight=1396&originWidth=2880&originalType=binary&ratio=1&rotation=0&showTitle=false&size=2646490&status=done&style=none&taskId=udc435d45-bacd-4223-86a8-fae09c21316&title=&width=1440)

有序树.子树有次序和无次序

森林

m(>=0)的互不相交的树的集合,一颗树也可以看成一个特殊森林
![image.png](https://img-blog.csdnimg.cn/img_convert/7033a7d64801dc03fca3a7ad2d5de42a.png#clientId=u86547499-290f-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=699&id=ub402f5f5&margin=[object Object]&name=image.png&originHeight=1398&originWidth=2386&originalType=binary&ratio=1&rotation=0&showTitle=false&size=1395012&status=done&style=none&taskId=ua23a55f3-8433-4399-a3ea-e62b8f8c153&title=&width=1193)

二、二叉树的定义

  • 二叉树的结构性强,规律性强
  • 所有的树都能转换为对应的二叉树,不失去一般性

普通树(多叉树)若不转换为二叉树,那么就会导致运算能难…二叉树的结构性强,规律性强,每个节点最多能有2个分支节点或者叶子,所有的树都可以转换为二叉树,这样就能解决很多树的存储结构和运算的存储性

二叉树的特点

  • 每个节点最多能有两个孩子
  • 子树有左右区分,次序不能颠倒
  • 二叉树可以是空集合

注意: 二叉树不是树的特殊情况,他们是两种概念。
二叉树节点的子树一定需要区分左右子树!!
![image.png](https://img-blog.csdnimg.cn/img_convert/8dadf9abebfa92c7437e908c0fce42de.png#clientId=u86547499-290f-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=375&id=uc7fe6f0d&margin=[object Object]&name=image.png&originHeight=750&originWidth=1154&originalType=binary&ratio=1&rotation=0&showTitle=false&size=291867&status=done&style=none&taskId=u9b29a2b5-9ad4-4af1-9e31-d6591e30dfa&title=&width=577)

二叉树的5中形态

![image.png](https://img-blog.csdnimg.cn/img_convert/e78a7b820b875e66f0bb87d3ff8c96d8.png#clientId=u86547499-290f-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=123&id=u7f1eaf5d&margin=[object Object]&name=image.png&originHeight=246&originWidth=1370&originalType=binary&ratio=1&rotation=0&showTitle=false&size=161072&status=done&style=none&taskId=u316b0f8b-71c5-433b-94fb-65e00ed29d3&title=&width=685)

虽然二叉树和树的概念不同,但树的基本术语和二叉树通用

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

重要操作:

  • 前中后序遍历

![image.png](https://img-blog.csdnimg.cn/img_convert/38be17e15300fba54677c2b0036061ec.png#clientId=u86547499-290f-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=332&id=u2f2abd9a&margin=[object Object]&name=image.png&originHeight=664&originWidth=1208&originalType=binary&ratio=1&rotation=0&showTitle=false&size=594419&status=done&style=none&taskId=udab01059-214b-47ee-8c9f-16cda4f7e86&title=&width=604)

四、二叉树的性质和存储结构

1. 性质1

  • 第i层当中最多2^i-1个节点
  • 第i层当中最少有1个结点

![image.png](https://img-blog.csdnimg.cn/img_convert/a08b94dd673fcaa5756768c7935a21d1.png#clientId=u86547499-290f-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=243&id=u3ce069e2&margin=[object Object]&name=image.png&originHeight=486&originWidth=1092&originalType=binary&ratio=1&rotation=0&showTitle=false&size=188787&status=done&style=none&taskId=u7be9bf51-b375-4ace-9f6e-7bb1c132096&title=&width=546)

2. 性质二

  • 深度为K的二叉树当中最多有2^k-1个结点

![image.png](https://img-blog.csdnimg.cn/img_convert/64b08278866f79ce557d751843528b9e.png#clientId=u86547499-290f-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=317&id=uc82b3485&margin=[object Object]&name=image.png&originHeight=634&originWidth=1076&originalType=binary&ratio=1&rotation=0&showTitle=false&size=157221&status=done&style=none&taskId=u87b37d17-7001-40ae-862b-4c408354e59&title=&width=538)

3. 性质三

![image.png](https://img-blog.csdnimg.cn/img_convert/fd0dcf5657d6dc4b41f4131effd69197.png#clientId=u86547499-290f-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=278&id=ub0a92abf&margin=[object Object]&name=image.png&originHeight=768&originWidth=1350&originalType=binary&ratio=1&rotation=0&showTitle=false&size=491526&status=done&style=none&taskId=u1e04ee3a-7156-41ea-9931-71fe0fd1ddd&title=&width=489)

特殊性质的二叉树

二叉树有两种特殊形式,满二叉树完全二叉树

满二叉树

定义
  • 一个深度为k的二叉树有2^k-1个结点称之为满二叉树(也就是结点==最大结点)

![image.png](https://img-blog.csdnimg.cn/img_convert/9432ba90c37d69f801061b716535b9c1.png#clientId=u86547499-290f-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=156&id=u20d9648b&margin=[object Object]&name=image.png&originHeight=434&originWidth=722&originalType=binary&ratio=1&rotation=0&showTitle=false&size=189055&status=done&style=none&taskId=uac037eeb-86f1-49af-a173-6e14e99d154&title=&width=260)

特点
  1. 每一层上的结点数,都是最大结点树
  2. 叶子结点全部都在最底层
  3. 二叉树的编号规则
    1. 从根节点开始,层层编号

在同样深度的二叉树结点个数最多
在同样深度的二叉树叶子结点个数最多

完全二叉树

深度为k的具有n个结点的二叉树,每一个结点与深度为k的满二叉树中编号一一对应的就是完全二叉树。

判断是否为完全二叉树
  • 给二叉树编号,和满二叉树的编号作对比
    • 若完全一样,则是完全二叉树
    • 若有不一样,则不是完全二叉树
  • 方法二

![image.png](https://img-blog.csdnimg.cn/img_convert/eb09e5e1bd809c7d06a9774e7a8549c1.png#clientId=u86547499-290f-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=117&id=u7028a14c&margin=[object Object]&name=image.png&originHeight=234&originWidth=698&originalType=binary&ratio=1&rotation=0&showTitle=false&size=87351&status=done&style=none&taskId=ubb14b731-f27e-4816-8516-4dd4e05a733&title=&width=349)
![image.png](https://img-blog.csdnimg.cn/img_convert/e0bd991c35db491c542efc65b81a13c2.png#clientId=u86547499-290f-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=176&id=uccd909f2&margin=[object Object]&name=image.png&originHeight=352&originWidth=1380&originalType=binary&ratio=1&rotation=0&showTitle=false&size=254750&status=done&style=none&taskId=ub4766332-afed-456c-be73-d21d63ecf78&title=&width=690)

特点

  1. 叶子结点只可能分配在层此最大的两层之上
  2. 对于任意的结点,如果右边子树最大层次为i,name左子树的最大层此必须为i或者i+1

性质1

  • 表明了完全二叉树结点n树与完全二叉树深度K之间的关系

![image.png](https://img-blog.csdnimg.cn/img_convert/d895673acd7b98f99e7026f218d65547.png#clientId=u86547499-290f-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=355&id=ucf0d7991&margin=[object Object]&name=image.png&originHeight=710&originWidth=1220&originalType=binary&ratio=1&rotation=0&showTitle=false&size=250114&status=done&style=none&taskId=uf6c1e4ce-fd7c-4680-9dca-808a0fb59d3&title=&width=610)

性质2

  • 求完全二叉树双亲结点和孩子结点编号之间的关系

![image.png](https://img-blog.csdnimg.cn/img_convert/9f45c6b70c7bf0a7579325ffa341b069.png#clientId=u86547499-290f-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=207&id=u0aec2183&margin=[object Object]&name=image.png&originHeight=414&originWidth=894&originalType=binary&ratio=1&rotation=0&showTitle=false&size=284874&status=done&style=none&taskId=u70c7d328-05a3-488e-b375-351db5b106d&title=&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值