参考这篇文章
二叉树知识点最详细最全讲解-CSDN博客
目录
预备知识
基本术语
相关性质
1.二叉树的定义
2.二叉树的性质
3.二叉树的种类
3.1 满二叉树
3.2 完全二叉树
3.3 二叉查找树
3.4 平衡二叉搜索树
4.二叉树的存储方式
4.1 链式存储
4.2 顺序存储
4.二叉树的遍历方式
例子:
5.二叉树的定义
6.二叉树遍历代码实现
预备知识
关于树有一点名词,大家需要事先了解一下:
基本术语
- 节点的度:节点拥有的子树的树木
- 叶子:度为0的节点
- 分支节点:度不为0的节点
- 树的度:树中节点的最大的度
- 层次:根节点的层次为1,其余节点的层次为该节点的双亲节点+1
- 树的高度:树中节点的最大层次
- 森林:0个或者多个不相交的树组成
相关性质
- 树的节点数 = 所有节点度数+1
- 度为m的树第i层最多有m的i-1次方个节点
1.二叉树的定义
二叉树是每个节点最多有两个子树的树结构,共有5种形态
2.二叉树的性质
- 二叉树第i层的节点数目最多为2的i-1次方 (i>=1)
- 深度为k的二叉树最多有2的k次方-1 (k>=1)个节点
- 包含n个节点的二叉树的高度至少为log2(n+1)
- 在任意一颗二叉树种,若终端节点的个数为n0,度为2的节点数为n2,则n0=n2+1
3.二叉树的种类
3.1 满二叉树
高度为h,并且由2{h} –1个结点的二叉树,被称为满二叉树,就是每一个节点上都有两个孩子节点(除最后一层节点处)
3.2 完全二叉树
一颗二叉树中,只有最下面两层节点的度可以小于2,并且最下层的叶节点集中在靠左的若干位置上。
就是先把树的一层排满,再排下一层,并且要从左往右排
一个满二叉树肯定是完全二叉树,一个完全二叉树不一定是满二叉树。
3.3 二叉查找树
二叉查找树(Binary Search Tree),又被称为二叉搜索树。设x为二叉树中的一个节点,x节点包含关键字Key,节点x的Key值记为Key[x]。如果y是x的左子树中的一个节点,则Key[y]<=Key[x];如果y是x的有子树的一个节点,则Key[y]>=Key[x]。
就是在原本的二叉树上每一个节点有自己的值,并且满足规则 左子树的值 < 根节点的值 < 右子树的值
3.4 平衡二叉搜索树
左右子树的高度差绝对值不超过1,并且左右两个子树都是一个平衡二叉树
4.二叉树的存储方式
4.1 链式存储
通过指针把分布在散落在各个地址的节点串联在一起,如下图所示
4.2 顺序存储
顺序存储就是用数组存储二叉树,一横排一横排的存储
- 依据二叉树的性质,完全二叉树和满二叉树采用顺序存储比较合适,树中结点的序号可以唯一地反映出结点之间的逻辑关系,这样既能够最大可能地节省存储空间,又可以利用数组元素的下标值确定结点在二叉树中的位置,以及结点之间的关系。
- 对于一般的二叉树,如果仍按从上至下和从左到右的顺序将树中的结点顺序存储在一维数组中,则数组元素下标之间的关系不能够反映二叉树中结点之间的逻辑关系,只有增添一些并不存在的空结点,使之成为一棵完全二叉树的形式,然后再用一维数组顺序存储.
4.二叉树的遍历方式
前序遍历:根 左 右
中序遍历:左 根 右
后序遍历:左 右 根
看根在哪个位置就是哪种遍历
例子:
5.二叉树的定义
Java版本
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
6.二叉树遍历代码实现
马上会更新的~~