提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、二叉树是什么?
在学习二叉树之前要先了解树的基本概念:
1.树:一种表示层次关系的(一对多)的数据结构.
a.有且只有一个特定的节点(结点),该节点没有前驱,被称为根节点.
b.剩余的n个互不相交的子集,其中每个子集也都是一棵树,被称为根节点的子树
如我们电脑中的根目录就相当于是一个根节点,而根目录下的各个次级目录就相当于是根目录的子节点;又因为次级目录之间没有联系(互不相交)所以每个次级目录都是一棵树,都是根节点的子树;
2.树的表示方式:
树的表示方式有倒悬树(如上图)、嵌套法、凹凸法
二、二叉树
1.定义
各个节点下最多只有两个节点的树(即一对二)
特点:
a.普通树可以很方便的转变成二叉树,二叉树的节点数量最多为2
b.二叉树是n个有限元素的集合,由一个称为根(root)的元素
以及两个不想交的,被分别称为左子树/右子树,组成有序树.
c.当集合为空时,就称之为空二叉树.
2.二叉树的种类
-
满二叉树
二叉树的第i层最多有2^(i-1)个节点
每层的节点数都是2^(i-1),这种叫做满二叉树
-
完全二叉树
对树中的节点,从上至下,从左至右的顺序进行编号,如果编号为i(1≤i≤n)的节点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵树称之为完成二叉树.(即在满二叉树的情况下,完全二叉树的最后一层子节点数可以从右向左减少)
和满二叉树的区别:完全二叉树最后一层可以不满
-
排序二叉树
二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。
定义一: (Java中使用)
一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
(4)没有键值相等的结点。
即:左 < 根 < 右
定义二:
一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;