当前位置: 首页 > news >正文

小程序免费制作平台真正免费可以导出源码东莞优化seo

小程序免费制作平台真正免费可以导出源码,东莞优化seo,东莞网页制作免费网站制作,做网站优化就是发文章吗线索二叉树与森林 线索二叉树定义结点结构线索链表定义二叉树线索化算法思想二叉链表加中序线索算法 线索链表上运算在中序线索二叉树上查找某结点*p的后继结点算法实现 线索二叉树中序遍历 森林和树树的存储结构双亲表示法孩子链表表示法带双亲孩子链表表示法 孩子兄弟表示法 …

线索二叉树与森林

  • 线索二叉树
    • 定义
    • 结点结构
    • 线索链表定义
    • 二叉树线索化算法
      • 思想
      • 二叉链表加中序线索算法
    • 线索链表上运算
      • 在中序线索二叉树上查找某结点*p的后继结点
        • 算法实现
      • 线索二叉树中序遍历
  • 森林和树
    • 树的存储结构
      • 双亲表示法
      • 孩子链表表示法
        • 带双亲孩子链表表示法
      • 孩子兄弟表示法
    • 树,森林与二叉树转换 考点
      • 树转换成二叉树
      • 森林转换成二叉树
      • 二叉树转换为树
      • 二叉树还原为森林
    • 树与森林的遍历
      • 树的遍历
        • 树的前序遍历定义:
        • 树的后序遍历定义:
      • 森林遍历
        • 前序遍历
        • 后序遍历

线索二叉树

定义

n个结点的二叉链表中含有n+1个空指针域为什么,详见:数据结构复习之树与二叉树中的二叉链的部分。利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前趋和后继结点的指针(这种附加的指针称为"线索")。

这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。

结点结构

lchilditagdatartagrchild

说明:
ltag=0,lchild域指向结点的左孩子
=1,lchild域指向结点的前趋

rtag=0,rchild域指向结点的右孩子
=1,rchild域指向结点的后继

线索链表定义

typedef struct node
{DataType data;int ltag, rtag;struct node *lchild, *rchild;
} BinThrNode;//线索链表结点类型typedef BinThrNode *BinThrTree;
//定义线索链表类型

二叉树线索化算法

思想

按某种次序遍历二叉树,在遍历过程中用线索取代空指针即可.

二叉链表加中序线索算法

算法与中序遍历算法类似,只是将遍历算法中访问根结点*bt的操作改为在*bt和中序前趋*pre之间建立线索。

void InorderThread(BinThrTree bt)
{Static BinThrNode *pre = NULL;  //定义指向前趋结点的指针pre(静态变量,只初始化1次),保存刚访问过的结点if (bt != NULL)  //当二叉树为空时结束递归{InorderThread(bt->lchild);  //左子树线索化if (bt->lchild == NULL)bt->ltag = 1;elsebt->ltag = 0;if (bt->rchild == NULL)bt->rtag = 1;elsebt->rtag = 0;if (pre) {if (pre->rtag == 1)pre->rchild = bt;  //给前趋结点加后继线索if (bt->ltag == 1)bt->lchild = pre;  //给当前结点加前趋线索}pre = bt;                   //将刚访问过的当前结点置为前趋结点InorderThread(bt->rchild);  //右子树线索化}
}

线索链表上运算

在中序线索二叉树上查找某结点*p的后继结点

分析:
(1)若结点*p的rtag域值为1,则表明p->rchild为右线索,它直接指向结点。
(2)若结点*p的rtag域值为0,则表明p->rchild指向右孩子结点,结点*p的中序后继结点必是其右子树第一个中序遍历到的结点,因此从结点*p的右孩子开始,沿左指针链向下查找,直到找到一个没有左孩子(即ltag为1)的结点为止,该结点是结点*p的右子树中"最左下"的结点,它就是结点*p的中序后继结点。

算法实现
BinThrNode *InorderNext(BinThrNode *p)
{                          //在中序线索二叉树上求结点*p的中序后继结点if (p->rtag == 1)      // rchild域为右线索return p->rchild;  //返回中序后继结点指针else {p = p->rchild;                       //从*p的右孩子开始while (p->ltag == 0) p = p->lchild;  //沿左指针链向下查找return p;}
}

线索二叉树中序遍历

分析:
首先从根结点起沿左指针链向下查找,直到找到一个左线索标志为1的结点止,该结点的左指针域必为空,它就是整个中序序列中的第一个结点。访问该结点,然后就可以依次找结点的后继,直至中序后继为空时为止。

void TinorderThrTree(BinThrThrtree bt)
{BinThrNode *p;if (bt != NULL)  //二叉树不空{p = bt;               //使p指向根结点while (p->ltag == 0)  //查找出中序遍历的第一个结点p = p->lchild;do {printf("%c", p->data);  //输出访问结点值p = InorderNext(p);     //调用前面的函数查找结点*p的中序后继} while (p != NULL);        //当p为空时算法结束}
}

森林和树

树的存储结构

双亲表示法

如下图所示:在这里插入图片描述

双亲域,存储双亲结点数组中的下标值。找儿子不太方便。

孩子链表表示法

在这里插入图片描述

孩子链表是一个带头结点的单链表。

为了便于查找双亲,可在各个头结点中增加一个双亲域以存储双亲结点在头结点数组中的下标值,称其为带双亲的孩子链表表示法。

带双亲孩子链表表示法

在这里插入图片描述

孩子兄弟表示法

数据域–存储树上结点的数据元素;孩子域–存放指向本结点第一个孩子的指针;兄弟域–存放指向本结点下一个兄弟的指针。
如下图:
在这里插入图片描述

树,森林与二叉树转换 考点

二叉树有比较成熟的算法。

树转换成二叉树

步骤:
根转化完了一定没有右子树,因为是原先兄弟结点转化成右子树,根没有兄弟。
① 在所有相邻兄弟结点之间分别加一条连线。
② 对每个分支结点,除了其最左孩子外,删去该结点与其他孩子结点的连线。
③ 以根结点为轴心,顺时针旋转45°
如下图所示:
在这里插入图片描述

森林转换成二叉树

步骤:
① 分别将树林中的每棵树转换为二叉树。
② 从最后那棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子,直到所有二叉树全部连接,这样得到的二叉树的根结点就是树林中第一棵树的根结点。
如下图所示:
在这里插入图片描述

二叉树转换为树

目的是利用二叉树计算完成后,得还原回去。
(是否存在左孩子,存在再一路找右孩子的右孩子,右孩子变成兄弟)
步骤:
① 若某结点是其双亲结点的左孩子,则将该结点的右孩子以及当且仅当连续地沿着此右孩子的右子树方向不断地搜索到的所有右孩子,都分别与该结点的双亲结点用虚线连接起来。
② 删去原二叉树中所有双亲结点与其右孩子的连线。
③ 将图形规整化,使各结点按层次排列,并且将虚线改成实线。
如下图所示:在这里插入图片描述

二叉树还原为森林

① 去掉二叉树的右子树,将去掉右子树后剩下的二叉树转换为一棵树。
② 将在第①步中被去掉的右子树再执行第①步。
③ 重复前两步,直到转换完成。

如下图所示:

在这里插入图片描述

树与森林的遍历

树的遍历

树的前序遍历定义:

①访问根结点; ②依次前序遍历根的各子树。

树的后序遍历定义:

①依次后序遍历根的各子树; ②访问根结点R。

注意:
① 前序遍历一棵树恰好等价于前序遍历该树对应的二叉树;
② 后序遍历一棵树恰好等价于中序遍历该树对应的二叉树

森林遍历

前序遍历

①访问森林中第一棵树的根结点;
②前序遍历第一棵树中根结点的各子树所构成的森林
③前序遍历除第一棵树外其它树构成的森林。

后序遍历

①后序遍历森林中第一棵树的根结点的各子树所构成的森林;
②访问第一棵树的根结点;
③后序遍历除第一棵树外其它树构成的森林。

注意:
① 前序遍历森林等同于前序遍历该森林对应的二叉树
② 后序遍历森林等同于中序遍历该森林对应的二叉树

http://www.hkea.cn/news/565181/

相关文章:

  • wordpress邮件订阅seo技术外包
  • 深圳营销网站建站公司搜索引擎关键词的工具
  • 做网站如何网站考虑优化游戏推广员是诈骗吗
  • 公众号做视频网站吗关键词排名怎么做上首页
  • 重庆做网站价格优化软件下载
  • 如何做网站镜像今日最火的新闻
  • 水果网站开发所需的成本市场营销实际案例
  • 无锡市新吴区住房和建设交通局网站西安百度关键词包年
  • 网站平台方案设计seo上首页
  • 郑州做网站的联系方式搜狗友链交换
  • 一般建设一个网站多少钱怎么接广告赚钱
  • 计算机专业网站开发方向销售推广方案
  • 上海网站建设公司排名西安百度公司
  • 中国网网址是多少网站推广优化教程
  • 关于加强机关网站建设运营培训
  • dw做的网站怎么让别人看到如何建立一个网站
  • 保险网站建设优缺点seo代码优化步骤
  • 如何快速建网站百度电脑版入口
  • 山东省建设工程信息网站最近最新的新闻
  • 免费网站建设方案锦绣大地seo官网
  • 电子商务的网站建设牛排seo系统
  • 资源收费网站怎么做网站快速优化排名官网
  • 招标网哪个网站信息可靠百度站长工具网站
  • 郑州七七网站建设互联网推广公司
  • 佛山做外贸网站代理商百度收录技术
  • 公司网站建设需要什么今日热搜第一名
  • 烟台建设企业网站网站快速收录入口
  • 怎么做繁体字网站网络营销公司注册找哪家
  • 做ppt介绍网站吗网站搜索引擎优化工具
  • 深圳网站建设有没有市场百度搜索推广的五大优势