数据结构中的树,是对现实世界中的树的一层简化: 把树根抽象为根节点,述职抽象为边,树枝的两个端点抽象为节点, 树叶抽象为叶字节点。抽象后的树结构如下:
把这棵树抽象颠倒一下就得到了计算机中的树结构:
结合这张图,我们来讲解树的关键特性和重点概念。
- 树的层次计算规则: 跟节点所在的层为第一层,其自己点所在的为第二层,以此类推
- 结点和树的“高度”计算规则:叶子结点高度记为1,每向上一层高度就加1,逐层向上累加至目标结点时,所得到的的值就是目标结点的高度。树中结点的最大高度,称为“树的高度”。
- 度的概念: 一个节点开叉出去多少子树,即为度
- 叶子节点就是度为0的结点
二叉树
二叉树是指满足一下要求的树
- 它可以没有根节点作为一棵空树存在
- 如果他不是空树,那么他必须有根节点,左子树和右子树组成,且左右子树都是二叉树
二叉树的编码实现
在js中定二叉树,他的结构分为3块
- 数据域
- 左侧子节点的引用
- 右侧子节点的引用
//二叉树节点的构造函数
function TreeNode(val){
this.val = val
this.left = this.right = null
}
当需要新建一个二叉树时,直接调用构造函数传入数据域的值就行了:
const node = new TreeNode(1)
如此便能得到一个值为1的二叉树节点,从结构上来说,他张这样:
以这个节点为根节点,我们可以通过给left、right赋值拓展其子树信息,延展出一棵二叉树。因此从更加细化的角度来看,一棵二叉树的形态实际是