二叉树的五个重要性质
二叉树是最常用的数据结构之一,笔者过去一直将关注点放在复杂的树结构(例如红黑树,自平衡树),认为那些才是树的重要应用,但当重新由基本看起,才发现树的基本定中就隐藏着树这一结构的精髓。尽管是些浅薄蠢笨的理解和推演,但笔者还是满怀兴奋的想要将它记录下来。 一、二叉树的定义 二叉树的定义不用多说,很多书本上都有明确的定义,但有些细节是笔者过去所没有注意的,先给出殷人昆教授对于二叉树的基本定义—— 二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。 可以看出二叉树的定义是递归的,根结点的子树仍然是二叉树,到达空子树时递归定义结束。 一般来说,关于树的术语对于二叉树都是适用的,但应该明确的是二叉树不是树,理由如下: 树在图论中被视为用n-1条边连接n个结点的的特殊的图。图的顶点结合非空,故树的顶点非空。图论中另外定义了N叉树,它可以是空树,二叉树属于N叉树。 非空二叉树有根,根结点的子树有左右之分,次序不能颠倒;若其中一棵子树为空,则另一棵子树也必须保持左右之分。树可以没有根(自由树);即使有根,其子树也没有这种区分。 那么,这就出现一个问题——二叉树的叶结点无子女,是否可称它为无子树? 根据定义,应该是不能的,因为可认为叶子点的左右子树为空子树。 虽然认识这一区别的目的并非应试,但笔者还是提一句