数据结构学习:树

数据结构学习:树

树状图是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:
每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树

树的种类有这些:
无序树:树中任意节点的子结点之间没有顺序关系,这种树称为无序树,也称为自由树;
有序树:树中任意节点的子结点之间有顺序关系,这种树称为有序树;
二叉树:每个节点最多含有两个子树的树称为二叉树;
完全二叉树
满二叉树
霍夫曼树:带权路径最短的二叉树称为哈夫曼树或最优二叉树;

但是正常来说我们学得比较多的是二叉树(Binary Tree),这篇文章也讲一手二叉树。
二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根节点的左子树和右子树组成。
树

二叉树的特点有:
1.每个结点最多由两棵子树。所以二叉树种不存在度大于2的结点。注意不是只有两棵子树,而是最多有。没有子树或者有一棵子树都可以的。
2.左子树和右子树是有顺序的。好比人的手,左手右手,不能说你有双手就忽略你的左右次序。
3.即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。

二叉树的形态:
二叉树有5种基本形态:
1.空二叉树
2.只有一个根节点的树
3.根结点只有左子树
4.根结点只有右子树
5.根结点既有左又有右子树

特殊二叉树
1.斜树:所有结点都只有左节点的二叉树叫左斜树,所有结点都是只有右结点的二叉树叫右斜树,是不是觉得如果这样分的话岂不是一条线?那和线性表有区别吗?的确,线性表可以理解为一种特殊的树。
2.满二叉树
就是上面所述的第五种,既有左又有右的二叉树。而且所有叶子都在同一层上。
满二叉树的特点有:
1).叶子只能在最下一层。
2).非叶子的结点的度一定是2.
3).在同样深度的二叉树种,满二叉树结点个数最多,叶子树最多。
3.完全二叉树
对一课具有n个结点的二叉树按层序编号,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树种编号为i的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。
注意:满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。
就好比:正方形一定是矩形,矩形不一定是正方形。
特点:
1)叶子结点只能在最下两层
2)最下层的叶子一定集中在左部连续位置
3)倒数二层如果有叶子节点,一定都在右部连续位置(因为这一层补不完放下去不就是少了一个了吗)
4)如果结点度为1,则该结点只有左孩子,即不存在只有右子树的情况。而且该结点连接着的左孩子一定是最后一个叶子
5)同样节点数的二叉树,完全二叉树的深度最小。
满二叉树和完全二叉树的图片如下:
满树,完全二叉树

二叉树的性质:
1.在二叉树的第i层上至多有 2 i 1 2^{i-1} 个结点
2.深度为k的二叉树至多有 2 k 1 2^{k}-1 个结点
3.对任何一棵二叉树T,如果其终端结点树为n0,度为2的结点数为n2,则n0=n2+1
4.具有n个结点的完全二叉树的深度为不大于log2n的最大整数+1
5.如果对一棵有n个结点的完全二叉树的结点按层序编号(从第一层到最后一层,每层从左到右),对任一结点i(1<=i<=n)有:
1)如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是结点 ⌊ i/2 ⌋ 。
2)如果2i>n,则结点i无左孩子(结点i为叶子结点);否则其左孩子是结点2i 。
3)如果2i+1>n,则结点i无右孩子;否则其右孩子是结点2i+1 。

上述条件挺重要的,在实现该数据结构的时候需要用到这些性质。

猜你喜欢

转载自blog.csdn.net/a7806006/article/details/89300299
今日推荐