一、二叉树的定义
二叉树(binary tree)是树的一种特殊形式。二叉,顾名思义,这种树的每个节点最多有2个孩子节点。注意,这里是最多有2个,也可能只有1个,或者没有孩子节点。
二、二叉树的性质
2.1 性质1:
二叉树第i层上的结点数目最多为 2i-1 (i≥1) 。
2.2 性质2:
深度为k的二叉树至多有 2k-1 (k≥1) 个结点。
2.3 性质3:
在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1。
2.4 性质4:
在完全二叉树中,具有n个节点的完全二叉树的深度为[log2n]+1,其中[x]是向下取整。
2.5 性质5:
若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意一个编号为 i 的结点:
- 若 i=1,则该结点是二叉树的根,无双亲, 否则,编号为 [i/2] 的结点为其双亲结点;
- 若 2i>n,则该结点无左孩子, 否则,编号为 2i 的结点为其左孩子结点;
- 若 2i+1>n,则该结点无右孩子结点, 否则,编号为2i+1 的结点为其右孩子结点。
三、二叉树分类
- 二叉树:
每个结点最多有两棵子树且左右子树的顺序不能调换 - 满二叉树:
如果二叉树中任意一个结点,或者是叶结点,或者有两棵非空子树,且叶结点都集中在二叉树最下面一层 - 完全二叉树:
若二叉树最多只有最下面两层结点的度可以小于2,且最下面一层结点都依次排列在该层最左边的位置
四、二叉树的代码实现
// 定义一棵二叉树
public class TreeNode {
// 定义节点的值
int val;
// 定义左子树
TreeNode left;
// 定义右子树
TreeNode right;
// 定义初始化方法
TreeNode(int x) { val = x; }
}