证明由一棵二叉树的先序序列和中序序列可唯一确定这棵.doc_第1页
证明由一棵二叉树的先序序列和中序序列可唯一确定这棵.doc_第2页
证明由一棵二叉树的先序序列和中序序列可唯一确定这棵.doc_第3页
证明由一棵二叉树的先序序列和中序序列可唯一确定这棵.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

证明:由一棵二叉树的先序序列和中序序列可唯一确定这棵二叉树.txt每天早上起床都要看一遍“福布斯”富翁排行榜,如果上面没有我的名字,我就去上班。谈钱不伤感情,谈感情最他妈伤钱。我诅咒你一辈子买方便面没有调料包。因为知道先序遍历后,第一个根是唯一确定的.然后在中序遍历里这个根将它分为两个部分,第一个根的两棵子树的根也会唯一确定,依次此类推,所有子树的根都唯一确定,二叉树就是唯一的. 解题步骤1.由先序序列确定根结点(就是第一个字母了)2.按根结点把中序序列分为两段,前面的是左子树,后面的是右子树后面的步骤就基本是前面两步的重复注意先序序列和中序序列的概念这题目就很容易的搞定#include#includetypedef char TElemType;/Status是函数的类型,其值是函数结果状态码typedef int status;/函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2int w=0; #define Link 0#define Thread 1typedef struct BiThrNode TElemType data; struct BiThrNode *lchild,*rchild; /左右孩子指针 int LTag,RTag;BiThrNode,*BiThrTree;/构造二叉链表表示的二叉树status createbitree(BiThrTree &T) char ch; scanf(%c,&ch); if(ch=$) T=NULL; else if(!(T=(BiThrNode *)malloc(sizeof(BiThrNode)exit(OVERFLOW); T-data =ch; T-LTag=Link; T-RTag=Link; createbitree(T-lchild); createbitree(T-rchild); return OK;void InThreading(BiThrTree &p,BiThrTree &pre) / 算法6.7 /BiThrTree pre; if (p) InThreading(p-lchild,pre); / 左子树线索化 if (!p-lchild) / 建前驱线索 p-LTag = Thread; p-lchild = pre; if (!pre-rchild) / 建后继线索 pre-RTag = Thread; pre-rchild = p; pre = p; / 保持pre指向p的前驱 InThreading(p-rchild,pre); / 右子树线索化 / InThreading/输出元素status visit(TElemType e) printf(%c,e); return OK;status InOrderTraverse_Thr(BiThrTree T, status (*Visit)(TElemType) / 中序遍历二叉树T,并将其中序线索化,Thrt指向头结点。 BiThrTree Thrt,pre; if (!(Thrt = (BiThrTree)malloc(sizeof(BiThrNode) exit(OVERFLOW); Thrt-LTag = Link; Thrt-RTag =Thread; / 建头结点 Thrt-rchild = Thrt; / 右指针回指 if (!T) Thrt-lchild = Thrt; / 若二叉树空,则左指针回指 else Thrt-lchild = T; pre = Thrt; InThreading(T,pre); / 算法6.7:中序遍历进行中序线索化 pre-rchild = Thrt; pre-RTag = Thread; / 最后一个结点线索化 Thrt-rchild = pre; /* /Thrt指向头结点,若树不空,头结点的ltag为0,lchild指向根结点 BiThrTree p; printf(前序遍历线索二叉树:); if(Thrt-LTag=0) p=Thrt-lchild; while(true) while(p) visit(p-data); if(p-LTag=0)p=p-lchild; else break; while(p-RTag&p-rchild!=T) p=p-rchild; if(p-rchild=T)break; p=p-rchild; printf(n);/* / Thrt指向头结点,头结点的左链lchild指向根结点,头结点的右链lchild指向 / 中序遍历的最后一个结点。中序遍历二叉线索链表表示的二叉树T, / 对每个数据元素调用函数Visit。 printf(中序遍历线索二叉树:); p = Thrt-lchild; / p指向根结点 while (p != Thrt) / 空树或遍历结束时,p=T while (p-LTag=Link) p = p-lchild; if (!visit(p-data) return ERROR; / 访问其左子树为空的结点 while (p-RTag=Thread & p-rchild!=Thrt) p = p-rchild; visit(p-data); / 访问后继结点 p = p-rchild; / p进至其右子树根 printf(n); return OK; / InOrderTraverse_Thr/后序遍历status b(BiThrTree T,status(* visit)(TElemType e) if(T) if(b(T-lchild ,visit) if(b(T-rchild ,visit) if(visit(T-data) if(T-rchild=NULL&T-lchild=NULL) w+; return OK; return ERROR; else return OK; void main() BiThrTree T; createb

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论