二叉树的项目方法、原理?
二叉树的实现方式
1.第一类数组实现——空间浪费
用数组root[]存储结点值。
在这种实现当中,对于编号为k的节点,其左子节点的编号为2k,右子节点的编号为2k + 1,根节点的编号为1。这种实现易产生巨大的空间浪费,比如对于一个只有一条链的树,假设该树含有31个节点,存储这31个节点却需要开一个2^30的数组,因此该方法较少使用。
2.结构体+指针实现——节省空间
用结构体指针p来表示一个节点,其中p->v表示该节点的权值,p->left和p->right分别指向该节点的左右子节点,初始化全部为NULL.
若需用到该节点,则申请空间,否则视为无子节点!就这样互相联系成一颗结构体指针二叉树!节省空间,但是容易出现指针悬挂或者未知的指针内存错误。
3.第二类数组实现
对于一棵有n个节点树,只需要开一个大小为n的数组,节点按照出现顺序依次编号,这么一来,每个节点的左右节点的编号就无法通过2k,2k+1的形式来直接确定了。
这时就需要数组lch[maxn] , rch[maxn];其中lch[u]表示p节点的左子节点的编号,因此通过p = lch[p]就可以访问到p节点的左子节点,rch[p]的含义同理。
另外,用value[p]表示编号为p节点的权值,如此一来,申请新节点的newnode函数与初始化的newtree函数写法就变得不同了。
二叉树的三种遍历方式
1、 先序遍历:按照根节点->左子树->右子树的顺序访问二叉树
2、 中序遍历:按照左子树->根节点->右子树的顺序访问二叉树
3、 后序遍历:按照左子树->右子树–>根节点的顺序访问二叉树
原理:二叉树是每个结点的度不大于2的树结构。它有五种基本形态:二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。
二叉树的概念?
二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分[1]。
二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点[1]。
在计算机科学中,树是一种重要的非线性数据结构,直观的看,它是数据元素按分支关系组织起来的结构。二叉树是每个节点最多有两个子树的有序树。通常子树的根被称作“左子树”和“右子树”。二叉树常被用做二叉查找树和二叉堆或是二叉排序树。二叉树的每个节点至多只有两颗子树,二叉树有左右之分,次序不能颠倒。
二叉树如何建立?
二叉树建立方法:
一、我们要明确的一点是只有中序是无法创建二叉树的,它要结合先序,两者相联系才可以。
二、根据二叉树的图,得出先序的顺序是ABDECFG,而与此同时的中序DBEAFCG,根据这个建立。
三、然后就是要根据二叉树的原则编写代码,你要知道的是前序遍历序列中的首元素是二叉树的根节点。
四、然后你要做的是在中序遍历序列中找到这个节点,他是中间的分水岭,前面其左节点,后面是右节点。
五、最后要做的是建立根节点的左子树和右子树,再由中序 遍历序列中根节点的位置确定我们前面提到的子树的节点,这样二叉树就差不多建立完成了。