赞
踩
树是一种非线性的数据结构,它是由 n ( n>=0 )个有限结点组成一个具有层次关系的集合。 把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的
它具有以下的特点:
- 有一个特殊的结点,称为根结点,根结点没有前驱结点。
- 除根结点外,其余结点被分成M(M >0)个互不相交的集合T1、T2、…、Tm,其中每一个集合Ti (1 <= i <= m)又是一棵与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继。
- 树是递归定义的。
注意:
树形结构中,子树不能有交集,否则不是树形结构。
除了根节点以外,每个节点只能有一个前驱,可以有0个或多个后继。
下面的概念并不是十分重要,了解即可:
树有很多种表示方式,如:
双亲表示法, 孩子表示法 、 孩子双亲表示法 、孩子兄弟表示法等等。
孩子兄弟表示法:
class Node {
int value ; // 树中存储的数据
Node fifirstChild ; // 第一个孩子引用
Node nextBrother ; // 下一个兄弟引用
}
二叉树是一种数据结构,由节点组成,每个节点最多有两个子节点,分别为左子节点和右子节点。树的最上面的节点称为根节点,没有子节点的节点称为叶子节点。每个非叶子节点都有一个值,称为该节点的数据或关键字。
一个典型的二叉树节点包含以下属性:
满二叉树 : 一棵二叉树,如果 每层的结点数都达到最大值,则这棵二叉树就是满二叉树 。也就是说, 如果一棵 二叉树的层数为 K ,且结点总数是 2^k-1 ,则它就是满二叉树 。
完全二叉树 : 完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为 K 的,有 n 个结点的二叉树,当且仅当其每一个结点都与深度为K 的满二叉树中编号从 0 至 n-1 的结点一一对应时称之为完全二叉树。
前序遍历(Preorder Traversal):
2. 中序遍历(Inorder Traversal):
3. 后序遍历(Postorder Traversal):
优点:
高效的搜索: 二叉树的结构使得搜索操作非常高效,因为每个节点都最多有两个子节点,可以通过比较大小迅速确定搜索方向。
易于排序: 二叉搜索树(BST)的一种形式,能够在插入和删除操作中维护排序。
缺点:
不平衡可能性: 在某些情况下,二叉树可能会退化为链表,导致操作的时间复杂度变为O(n)。
对于特定类型的数据集,性能可能下降: 当数据集合中的数据顺序有序时,二叉树的性能可能变差,因为它将导致树的不平衡。
二叉树的存储结构可以分为两大类:
二叉树的顺序存储对二叉树是有一定要求的,普通的二叉树不适合使用顺序存储,会造成空间上的浪费。(二叉树顺序存储,在物理上是一个数组,在逻辑上是一颗二叉树)
如图:
只有完全二叉树才可以使用顺序存储
如图:
二叉树的链式存储结构,顾名思义就是使用链表来表示二叉树,使用链表来表示二叉树的结构,通常是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。