树是我们常用的数据结构,如堆、二叉搜索树、B树等,它们都有自己的特点,使得我们在程序设计中常常使用。下面就说说树的基础知识,树、二叉树和完全二叉树。并用java使用链表描述完全二叉树。
1、树
一棵树是一个非空的有限元素的集合,其中一个元素为根其余的元素组成树的子树。这个定义并不是那么的直观,在图论中,树的定义是无环的连通图。例如下图三棵树:
在画一棵树时,每个元素都代表一个节点。树根画在上面,其子树画在下面,在树中节点之间的关系有孩子、父母、兄弟、孙子、祖父、祖先、后代。如上图中最右边的树,1是2、3的父母;2和3是兄弟;2、3是1的孩子,4、5、6、7是1的后代。在树中没有孩子的元素称为叶子(右图中的4、5、6、7),树根是唯一没有父母的元素。
一棵树的高度或深度是树的层数。如上三图的高度都是3.
树中一个元素的度是其孩子的个数,如上右图中1的度是2.一棵树的度是元素度的最大值。
2、二叉树
一棵二叉树是有限个元素的集合(可以为空)。当二叉树非空时,其中有一个元素称为根,余下(如果有的话)被划分成两棵二叉树,分别称为左子树和右子树。
二叉树与树的区别:二叉树的每个元素都恰好有两棵子树(其中一个或两个可能为空)。而树的每个元素可有任意数量的子树。在二叉树中,每个元素都是有序的,也就是说有左子树和右子树之分。而树的子树是无序的。