JS数据结构(9)—— 树结构,二叉树

JS数据结构(9)—— 树结构

1.什么是树结构

树结构是一种非线性结构,以分层的方式存储数据。
现实中关于树结构的例子有家谱,还有公司的组织架构等。
树结构的抽象:
树结构的抽象
树结构的优点:
每种数据结构都有自己特定的应用场景,树结合了其他数据结构(数组,链表,哈希表)的优点。在模拟某些场景时,我们使用树结构会更加的方便。
因为树结构是非线性的,可以表示一对多的关系,我们可以使用树表示文件的目录结构。

2.树结构的术语

树(Tree):n(n>=0)个节点构成的有限集合。
空树:n = 0 时,就称为一个空树。
根(Root):位于树顶部的节点,它没有父节点。
子树(SubTree):子树由节点和它的后代构成。
父节点:有子树的节点是它的子树的根节点的父节点。
子节点:A是B的父节点,则B是A的子节点。
兄弟节点:具有同一个父节点的不同子节点互称为兄弟节点。
节点的度:节点的子树个数。
树的度:树的所有节点中最大的度数。
叶节点:度为0的结点。
节点的层次:根节点是第一层,其他的节点的层次是它的父节点的层次加1。
树的深度:数中所有节点的最大层次是这棵树的深度。
路径和路径长度:从节点A到节点H的路径是一个节点序列A,B,C…,H。路径所包含边的个数为路径的长度。

3.树的表示方法

(1)最普通的表示法
在这里插入图片描述
但是以这个方法表示树,因为树的节点个数不一样,所以在定义的时候很难实现。

(2)儿子-兄弟表示法
在这里插入图片描述
每一个节点由三个属性表示(数据,左子节点,兄弟节点)
比如A节点(数据是A,左子节点是B,无兄弟节点)
比如C节点(数据是C,左子节点是G,兄弟节点是D)

(3)儿子-兄弟表示法旋转
在这里插入图片描述
旋转之后,就变成了一个二叉树(每个节点最多只能有两个子节点)
任何的一棵树,都可以用二叉树来模拟出来。

4.二叉树

二叉树:树中的每个节点最多只能有两个子节点。
二叉树由根节点,左子树(TL)和右子树(TR)组成。
二叉树可以为空,也就是没有节点。
二叉树的形态:
在这里插入图片描述
二叉树的重要特性:
一个二叉树的第i层的最大节点数是:2^(i-1) ,i >= 1
深度为k的二叉树最大节点数是:2^k - 1, k >= 1
对于任何非空二叉树,若n0表示叶节点的个数,n2是度为2的非叶节点的个数,那么 n0=n2+1

二叉树的存储:
二叉树常见的存储方式是数组和链表。
(1)使用数组:
完全二叉树:从上至下,从左至右顺序存储。
但是大部分情况都不是完全二叉树。
如果把所有的二叉树都按照完全二叉树来存储的话,会造成很大的空间浪费。

(2)使用链表(常用):
把每个节点封装成一个Node节点,Node中包含存储的数据,左节点的指针,右节点的指针。
Node节点:
在这里插入图片描述
二叉树:
在这里插入图片描述

还有一种特殊的二叉树——二叉搜索树
关于二叉搜索树可以看我的另外一篇博客 二叉搜索树

(如果有什么错误,欢迎大佬在评论区指正,thank you~)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值