欢迎光临
我们一直在努力

二叉树 1

1 基本构成

度为 2 的树   最大有两个孩子       

类比计划生育  中最多 二胎 

可以 0个就是空树   可一个  可两个   只限定最大值  

理解1 就是由  根节点 和两个 左右 子树构成   或者  子树为空  

理解2  每个节点下 有两个节点  其中 节点可为空     

其次单个节点 也可以视作 子树  

 严格定义(数据结构标准说法)
 
– 子树:由一个根节点,加上它所有后代节点共同构成的集合。

– 叶子节点(没有孩子的节点):只有自己这一个节点,没有后代,依然满足「根节点+后代(空)」的规则,所以它本身就是一棵单节点子树。

只要有根,就能叫子树;单节点,是最小的子树

2   满二叉树  和 完全二叉树 

一、满二叉树(完美二叉树

定义每层结点都达到最大数量,没有结点:

除叶子结点外,所有节点都有左右两个子节点;

所有叶子结点在同一层。

计算 满二叉树 的总节点数   

sum  =  2^0 + 2^1+……+2^(h-1)    

利用等比数列 求和公式  

Sum  =  2 ^ h  -1

二、完全二叉树
定义
按从上到下、从左往右顺序依次填满结点,只允许最后一层右侧缺叶子:
最后一层外,上面所有层都是满二叉树

zhong  yao 

最后一层结点靠左连续排布,右侧空缺,

  不能中间空、右边有结点 

——————————————————————————————————————————————————————————————————————————————————————

3   物理结构(存储结构)    和    逻辑结构

简单来说,逻辑结构是我们 “脑海中” 对数据关系的抽象,

物理结构是数据在  “计算机内存中”  的真实安家方式。

两者的核心区别在于视角

物理结构描述数据在介质上的实际存放方式

连续存储(如C数组)把元素一个接一个排在内存里;

离散存储(如链表节点)则分散在各处,用指针串联。磁盘上文件系统的块分配也属于这一层面。

程序员通常不直接操控这一层,操作系统和硬件负责管理

逻辑结构描述数据元素之间的抽象关系,与存储在哪里无关。常见类型:

  • 线性:一对一(数组、链表、队列、栈)
  • 树形:一对多(二叉树、B树、堆)
  • 图形:多对多(有向图、无向图)
  • 集合:无特定顺序关系

关键联系:同一种逻辑结构可以用不同物理结构来实现。

比如"栈"(逻辑上是线性后进先出)既可以用连续的数组实现,

也可以用离散的链表实现——逻辑行为一样,物理布局截然不同。

个人理解

简单来看就是 受限于已有的物理空间的存储结构来实现抽象的逻辑结构

比方说 堆  就想象为 用数组 实现的  二叉树

在代码上操作的是数组  想象在操作一棵树一样的感觉  

优秀的程序员,就是在死板的、受限的物理内存之上,

通过精妙的算法,搭建出极其灵活且复杂的逻辑世界。

4  利用   数组 实现 完全二叉树

带着结论看问题  

 1   从根节点开始  从左至右 从上到下 下标从0开始 存储节点  

就是利用    结构体数组   实现完全二叉树    有什么好处嘛?

2 优势    利用下标计算 (  完全二叉树 包含  满二叉树 ) 父子关系 

  思考一下    假设 父亲的下标是 i    求孩子下标  

左孩子 的下标表达式为 就看 A和B就好  不就是 i+1嘛?这对吗

不对  多看机组 用数学归纳法  看出 普遍的规律   B和 D  还有 C和F

明显是  2i+1   得出结论1 左孩子 的下标表达式为 2i+1  

同理可得 右边的孩子呢?

就是  2i+2  也可以理解为就是  在左孩子的下标   +1  不就是相邻的嘛  而且是有序的    孩子 的下标表达式为 2i+1+1  == 2i+2

直接自己去 验证 没毛病的

假设 孩子的节点的下标为  j   求父亲的下标 

不就是反过来嘛?  如果为奇数就   下标-1 再/2 

如果为偶数那不就    下标-2 再/2

不不不  我们可以统一起来

因为  整数除法向下取整的原则 所以 

不论是偶数还是奇数  都可以用  (下标 – 1 ) /2

(5 -1)/2  和 (6-1)/2  结果都是 2  

最后 得出结论   

假设 孩子的节点的下标为  j   父亲的下标  === ( j-1) /2 

——————————————————————————————————————————————————————————————————————————————————————

5  注意 上述结论的前提最后好 是  完全二叉树 

像上图中   就必须将空出来的位置 保留下来 使得能够 正常表示并计算父子关系   浪费空间   

赞(0)
未经允许不得转载:171主机测评 » 二叉树 1
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址