<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">结点拥有的子树树称为结点的度。</span>
度为0的结点称为叶结点或终端结点。
树的度是树内各结点的度的最大值。
结点的子树的根称为该结点的孩子,该结点称为孩子的双亲
结点的层次从根开始定义,根为第一层,根的孩子为第二层。
树中结点的最大层次称为树的深度或高度
孩子表示法:
把每个结点的孩子结点排列起来,以单链表作存储结构,则n个结点有n个孩子链表,如果是叶子结点则此单链表为空。
孩子兄弟表示法:
每个结点设置两个指针,分别指向该结点的第一个孩子和此结点的右兄弟。(这个表示法把一棵复杂的树变成了一棵二叉树)
二叉树:
1.每个结点最多有两棵子树
2.左子树和右子树是有顺序的
3.即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。
二叉树有五种形态:
1.空二叉树
2.只有一个根结点
3.根结点只有左子树
4.根结点只有右子树
5.根结点既有左子树又有右子树
满二叉树:
完全二叉树:对一棵具有n个结点的二叉树按层序编号,如果编号为i的结点与同样深度的满二叉树中的编号为i的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。
二叉树的存储结构:
完全二叉树:顺序存储结构。
二叉链表:
结点:一个数据域+两个指针域。
class TreeNode{
int value;
TreeNode left;
TreeNode right;
}
遍历二叉树:
从根结点出发,按照某种次序访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。
前序遍历:
若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树。
中序遍历:
若树为空,则空操作返回,否则从根结点开始(不访问根结点),中序遍历根结点的左子树,然后是访问根结点,最后中序遍历右子树。
后序遍历:
若树为空,则空操作返回,否则从左到右先叶子后结点的方式遍历访问左右子树,最后是访问根结点。
层序遍历:
若树为空,则空操作返回,否则从树的第一层,也就是根结点开始访问,从上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。