定义:
树:连通无回路的无向图是一棵树.
森林:若图G中至少有两个连通分支,每个连通分支都是树,则称图G是森林.
根:树中的根是树的一个节点,任意节点都可以为根,根据不同问题可以选择树的一个顶点为根.
子节点&父节点:树根为0层,直接和树根相连的节点为根节点的子节点,根节点为其父节点,根节点的子节点为树的1层.对于除了根节点以外的节点u来说,直接与其相连的节点中,除了一个父节点以外的所有节点都是u的子节点,u节点的子节点的层数为u节点的层数加1.
子树:对于树中的一个节点u来说,包含其一个儿子节点以及儿子节点的所有后辈节点的树称为节点u的子树.
兄弟节点:同一父节点的子节点.
叶子节点:没有子节点的节点称为叶子节点.
分支节点:除了根节点和叶子节点之外的所有节点都称为分支节点.
树高:树的总层数.
二叉树:如果每个节点的儿子节点不多于两个,则称这棵树为二叉.每个父节点的子节点用左右儿子节点来加以区分,以左儿子节点为根的子树称为左子树,以右儿子节点为根的树称为右子树.
满二叉树:如果一个二叉树的任何节点或者树叶,或者恰好有两颗非空子树,则此二叉树称为满二叉树.
完全二叉树:如果一棵二叉树最多只有最下面的两次节点度数小于2,并且最下面一层的节点都集中在该层的最左边的连续位置,成称其实完全二叉树.
性质:
对于一棵有N个节点的树,一定有(N - 1)条边,如果删去一条边,将变成两棵树;如果添加一条边.将出现唯一一条回路.
树上任意两个顶点之间存在唯一路径.
在二叉树的第i层上至多有2^(i - 1)个节点(i >= 1).
深度为k的二叉树至多有2 ^ k - 1个节点(k >= 1).
对于任何一个二叉树,如果其叶子节点的数目为n0,度为2的节点数目为n2,则有n0 = n2 + 1.
具有n个节点的完全二叉树的深度为(int)log2(n) + 1.
树的遍历:
二叉树的遍历1)前序遍历
前序遍历的递归定义:对于一个节点,访问并输出根的信息;按照前序遍历左子树;按照前序遍历右子树.
2)中序遍历
中序遍历的递归定义:对于一个节点,按照中序遍历左子树;访问并输出根的信息;按照中序遍历右子树.
3)后序遍历
后序遍历的递归定义:对于一个节点,按照后序遍历左子树;按照后续遍历右子树;访问并输出根的信息.
总结:对于二叉树的三种遍历次序来说,整棵树的根一定是前序遍历序列的第一个节点,一定是后序遍历序列的最后一个节点.在中序遍历序列中,根节点前面的点一定属于根的左子树,根节点后面的点一定属于右子树.只要回到一棵二叉树的中序遍历序列和前序(或者后序)遍历序列,就可以唯一的确定二叉树的结构并写出另一种遍历序列.否则不能确定.
上述的三种遍历方式,除了中序以外都可以扩展到k叉树(每个节点的子节点个数都小于或者等于k)上.