【1】二叉树的定义
现在我们来做个游戏,我在纸上 已经写好了 一个 100 以内的正整数数字,请大家想办法猜出我写的是哪一个?注意你们猪的数字不能超过 7 个 , 我的回答只会告诉你是"大了"或"小了。
这个游戏在一些电视节目中,猜测一些商品的定价时常会使用。我看到过有些人是一点一点的数字累加的,比如 5 、 10 、 15 、 20 这样猜,这样的猜数策略大低级了 ,显然是没有学过数据结构和算法的人才做得出的事。其实这是一个很经典的折半查找算法。如果我们用下图(下三层省略)的办法,就一定能在 7 次以内,猜出结果来。
由于是 100 以内的正整数,所以我们先猜 50 ( 100 的一半) ,被告之"大了气于是再猜 25 ( 50 的一半) ,被告之"小了 气再猜 37 ( 2 5 与 50 的中间数) ,小了,于是猜 43 , 大了, 40 ,大了, 38 ,小了, 39 ,完全正确。
我们发现,如果用这种方式进行查找,效率高得不是一点点。对于折半查找的详细讲解,我们后面章节再说。不过对于这种在某个阶段都是两种结果的情形,比如开和关、 0 和 1 、真和假、上和下 、对与错,正面与反面等, 都适 合用 树状结构来建模,而这种树是一种很特殊的树状结构,叫做二叉树 。
【2】二叉树特点
二叉树的特点有:
•
每个结点最多有两棵子树,所以二叉树中不存在度大于 2 的结 点.注意不是只有两棵子树,而是最多有.没有子树或者有一棵子树都是可以的 .
•
左子树和右子树是有顺序的,次序不能任意颠倒。就像人 是双手、双脚,但显然左手、左脚和右手、右脚是不一样的,右手戴左 手套、右脚穿 左鞋都会极其别扭和难受。即使树中某结点只有 一棵 子树,也要区分它是左子树还是右子树. 下图中,树 1 和树 2 是同 一 棵树,但它们却是不同的 二 叉树 。 就好像你一不小心,摔伤了手,伤的是左手还是右手,对你的生活影响度是完全不同的。
二叉树具有五种基本形态:
1 空二叉树。
2 只有一个根结点。
3 . 根结点只有左子树 。
4 . 根结点只有右子树。
5 . 根结点既有左子树又有右子树。
【3】特殊二叉树
1. 斜树
顾名思义,斜树一 定要是斜的,但是往哪斜还是有讲究 。 所有的结点都只有左子树的 二叉树叫左斜树 。所有结点都是只有右子树的二叉树叫右斜树。这两者统称为斜树 。 斜树有很明显的特点,就是每一层都只有一个结点,结点的个数与二叉树的深度相同 。
有人会想,这也能叫树呀, 与我们的统性表结构不是一样吗。对的,其实线性表结构就可以理解为是树的 一种极其特殊的表现形式 。
2. 满二叉树