树的概念:
基于《数据结构Java语言描述》
树(Tree)结构是除了根结点和叶子结点之外,树中任意一个结点只有一个直接前驱结点(父结点)和多个直接后继结点(孩子结点),根结点没有前驱结点,叶子结点没有后继结点(笔记4.0)。
双亲表示表示法
二叉树
五种基本形态
满二叉树
一棵深度为k且有2k−1个结点的二叉树称为满二叉树。满二叉树具有以下特点:
①每一层上的结点数都达到最大值,即对给定的高度,它是具有最多结点数的二叉树;
②满二叉树中不存在度数为 1 的结点,每个分支结点均有两棵高度相同的子树,且树叶都在最下一层。
完全二叉树
在一棵二叉树中,除了最后一层,都是满的,并且最后一层或者是满的,或者是右边缺少连续若干结点,成为完全二叉树。满二叉树具有以下特点:
①叶子结点只能在最大的一层或最多只能在层次最大的两层上出现;
②对任一结点,若其右分支下子孙的最大层次为n(n≥1),则其左分支下的子孙最大层次不小于n;
③若是满二叉树,则必定是完全二叉树,反之不一定成立
顺序存储结构
“完全二叉树和满二叉树采用顺序存储比较合适”
二叉树的顺序存储结构是指用一组地址连续的存储单元依次自上而下、自左至右存储完全二叉树上的结点元素,即将完全二叉树上编号为i的结点元素存储在某个数组下标为i-1的分量中,然后通过一些方法确定结点在逻辑上的父子和兄弟关系
链式存储结构
二叉树的链式存储结构是指用一个链表来存储一棵二叉树,二叉树中的每个结点用链表的一个链结点来存储。
二叉树的每个结点最多有两个孩子。
用链接方式存储二叉树时,每个结点除了存储结点本身的数据外,还应设置两个指针域lchild 和rchild,分别指向该结点的左孩子和右孩子,如右图所示。