前言
终于到了之前C语言没有讲过的数据结构了,那就是二叉树了,关于二叉树的学习难度确实比前面学习的数据结构都要难一点,所以我们这个关于二叉树的博客大概率是有好几篇的。如有哪里出现错误也欢迎指出唔。
二叉树的概念
Java 中的二叉树是一种基础的数据结构,它是由节点组成的树形结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。二叉树的节点通常包含三个部分:节点的数据域、指向左子节点的指针和指向右子节点的指针。
我们通常把没有父节点(双亲节点)的节点叫做根节点,平常说的”这个根“,”它的根“中的根就是值根节点。
比如上面的”1“为整个树的根节点,也可以说”4“是 5和6的根,因为其实4,5,6也可以说其组成了一棵树,组成的这棵树我们叫做子树。
二叉树的性质:
- 定义性:二叉树是节点的集合,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。
- 层级性:二叉树的节点按照层次排列,根节点位于第一层,其子节点位于第二层,以此类推。
- 有序性:在二叉搜索树(Binary Search Tree, BST)中,每个节点的值都大于(或等于)其左子树中所有节点的值,并且小于(或等于)其右子树中所有节点的值。
- 递归性:二叉树可以递归地定义为:一个节点(包含数据域和两个指向子树的指针域)或者为空。
- 树的深度:二叉树的深度是根节点到最远叶子节点的最长路径上的边数。
- 节点的度:一个节点的度是指该节点拥有的子节点数量。在二叉树中,节点的度最大为2。
- 树的广度:二叉树的广度是指树的层数。
- 叶子节点:二叉树中没有子节点的节点称为叶子节点或外部节点。
- 内部节点:至少有一个子节点的节点称为内部节点。
- 树的高度:二叉树的高度是从根节点到任意叶子节点的最长路径上的边数。
- 子树:任何一个节点及其所有后代构成的二叉树称为该节点的子树。
- 兄弟节点:具有相同父节点的节点称为兄弟节点。
- 祖先节点:从根到该节点所经过的节点序列称为该节点的祖先。
- 后代节点:以某节点为根的子树中的任一节点都称为该节点的后