面试问题之数据结构与算法:二叉树
一、树
1、定义:
树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。
2、特点:
(1)每个结点有零个或多个子结点
(2)没有父节点的结点称为根结点
(3)每一个非根结点有且只有一个父节点
(4)除根结点外,每个子结点可以分为多个不相交的子树
二、二叉树
1、二叉树定义:
二叉树是每个结点最多有两个子树的树结构。它有五种基本形态:空树、只有根结点、只有左子树、只有右子树、同时拥有左右子树。
2、二叉树的性质:
性质1:二叉树第i层上的结点数目最多为2的i减1次方。
性质2:深度为k的二叉树最多有2的k次方减1个结点
性质3:包含n个结点的二叉树的高度至少为(log2 n)+1
三、满二叉树、完全二叉树和二叉查找树
1、满二叉树
定义:高度为h,并且由2的h次方减1个结点组成的二叉树,称为满二叉树
2、完全二叉树
定义:一棵二叉树中叶子结点只出现在最下层和次下层,且最下层的叶子结点集中在树的左部,这样的二叉树称为完全二叉树。显然,一棵满二叉树必定是完全二叉树,而完全二叉树未必是满二叉树。
3、二叉查找树
(1)若任意结点的左子树不空,则左子树上所有结点的值均小于它的根结点的值
(2)任意结点的右子树不为空,则右子树上所有结点的值均大于它的根结点的值
(3)任意结点的左、右子树也分别为二叉查找树。
(4)没有键值相等的结点