开发者社区> xinxinitblog> 正文

树、二叉树(二)

简介: 限于篇幅过长上一篇我们只谈了树、二叉树(一)比较基础的认识,下面我们深入的学习树与二叉树。 顺序存储结构 使用一组地址(一维数组)连续的存储单元来存储数据元素 //-------二叉树的顺序存储表示--------- #define MAXTSI...
+关注继续查看

限于篇幅过长上一篇我们只谈了树、二叉树(一)比较基础的认识,下面我们深入的学习树与二叉树。

顺序存储结构

使用一组地址(一维数组)连续的存储单元来存储数据元素


    //-------二叉树的顺序存储表示---------
    #define MAXTSIZE 100  //二叉树的最大结点数
    typedef TElemType SqBiTree[MAXTSIZE];
    SqBiTree bt;

完全二叉树:只需要从根起按层序存储,依次自上而下、自左至右存储结点元素,即将完全二叉树上编号为i的结点元素存储在如上定义的一维数组中下标为i-1的分量中。

完全二叉树

一般二叉树:一般二叉树同样要遵循完全二叉树的规则,将结点进行相对照,存储在一维数组的相对应分量中。

一般二叉树

顺序存储的优点与缺点

  1. 对于完全二叉树来说,顺序存储结构既简单又节约存储空间。

  2. 一般的二叉树采取顺序存储结构时,虽然简单,但容易造成存储空间的浪费。

  3. 在顺序存储的二叉树做插入和删除结点时,要大量移动结点。

链式存储结构

对照上面顺序存储结构的不足,我们引入了链式存储,二叉树的结点至少有三个域:数据域、左、右指针域。有时候我们还要知道它的双亲,所以还要加上一个指向双亲结点的指针域。
这里写图片描述

//----二叉树的二叉链表存储表示---
typedef struct BiTNode{
TElemType data;//结点数据域
struct BiTNode *lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;

这里写图片描述

遍历二叉树

遍历二叉树是沿着某个指定路径有规律的进行访问树的每一个结点,保证每个结点均能被访问一次,并且只能被访问一次。

遍历的实质是通过遍历结果将非线性结构的树中结点排成一个线性序列。

通过上一篇树、二叉树(一)
我们得知二叉树有根结点(D)、左子树(L)和右子树(R)三部分组成。
根据高中数学知识得知一共有DLR、LDR、LRD、DRL、RDL、RLD六种方式遍历。但若限定先左后右的原则则只有DLR、LDR、LRD三种情况,分别称为先(根)序遍历、中(根)序遍历、后(根)序遍历。

先序遍历

(1)访问根节点;

(2)先序遍历左子树;

(3)先序遍历右子数。

Status PreOrderTraverse(BiTree T)
{
 if(T==NULL)return OK;//空二叉树
 else{
 cout<<T->data;//访问根结点
 Pre

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
二叉树的层序遍历、二叉树叶节点输出算法、求二叉树的高度、层序创建一棵二叉树
二叉树的层序遍历、二叉树叶节点输出算法、求二叉树的高度、层序创建一棵二叉树
7 0
树与二叉树
在前边的博客中,我们认识了顺序表,链表,栈、队列等线性数据结构,这篇文章,我们将来认识新的数据结构——树形结构,认识树形结构的重点——二叉树,这部分数据结构也是数据结构中较为重要的部分,在笔试面试中也经常高频出现,需要我们认真学习对待!
23 0
二叉树、平衡二叉树AVL、红黑树、B树、B+树
B树的阶数等于叶节点最大关键字数量+1(因为关键字两边都有指向子节点的指针-分叉) 在m阶(m叉)B树中除根结点外,任何节点至少[m/2]个分叉,即至少[m/2]-1个关键字, [ ]代表向上取整。 节点内的关键字采用顺序查找或二分查找。 因为关键字太少会导致树变高,降低查找效率。另外就是保证同级子树的高度相同-平衡。
27 0
C++实现树 - 02 二叉树
这一讲我们来看看二叉树的实现,还不清楚树的结构的小伙伴建议先看看上面一讲关于树的定义。
55 0
C++实现树 - 03 二叉排序树
上一讲我们介绍了二叉树的代码实现以及其遍历方法,这一讲我们来看一看进阶版的二叉树 —— 二叉排序树(二叉搜索树)。第一次接触这一讲知识点的朋友一时反应不过来不用太焦虑,其实是非常正常的,看讲解以及代码的同时动手画一画或者实现以下会让你更容易理解~
26 0
+关注
xinxinitblog
C++和iOS码农
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载