- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.46③ 编写复制一棵二叉树的非递归算法。.doc
6.46③ 编写复制一棵二叉树的非递归算法。
要求实现下列函数:
void CopyBiTree(BiTree T, BiTree TT);
/* 基于层次遍历的非递归复制二叉链表 */
二叉链表类型定义:
typedef char TElemType; // 设二叉树的元素为char类型
typedef struct BiTNode {
TElemType data;
BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
可用队列类型Queue的相关定义:
typedef BiTree QElemType; // 设队列元素为二叉树的指针类型
Status InitQueue(Queue Q);
Status EnQueue(Queue Q, QElemType e);
Status DeQueue(Queue Q, QElemType e);
Status GetHead(Queue Q, QElemType e);
Status QueueEmpty(Queue Q);
void CopyBiTree(BiTree T, BiTree TT)
/* 基于层次遍历的非递归复制二叉链表 */
{
QElemType p;Queue t2,tt2;
InitQueue(t2);
InitQueue(tt2);
if(!T)TT=NULL;
else
{
EnQueue(t2,T);
if(!(TT=(BiTNode*)malloc(sizeof(BiTNode))))exit(OVERFLOW);
p=TT;
p-data=T-data;
p-lchild=p-rchild=NULL;
EnQueue(tt2,p);
while(!QueueEmpty(t2))
{ DeQueue(t2,T);
DeQueue(tt2,p);
if(T-lchild)
{ EnQueue(t2,T-lchild);
if(!(p-lchild=(BiTNode*)malloc(sizeof(BiTNode))))exit(OVERFLOW);
p-lchild-data=T-lchild-data;
p-lchild-lchild=p-lchild-rchild=NULL;
EnQueue(tt2,p-lchild);
}
if(T-rchild)
{ EnQueue(t2,T-rchild);
if(!(p-rchild=(BiTNode*)malloc(sizeof(BiTNode))))exit(OVERFLOW);
p-rchild-data=T-rchild-data;
p-rchild-lchild=p-rchild-rchild=NULL;
EnQueue(tt2,p-rchild);
}
}
}
}
6.65④ 已知一棵二叉树的前序序列和中序序列分别
存于两个一维数组中,试编写算法建立该二叉树的二
叉链表。
要求实现以下函数:
void BuildBiTree(BiTree bt, int ps, char *pre,
int is, char *ino, int n);
/* 当前要建立的子树bt的元素总数为n,*/
/* 元素在前序序列pre的起始位置为ps,*/
/* 元素在中序序列ino的起始位置为is */
二叉链表类型定义:
typedef char TElemType;
typedef struct BiTNode {
TElemType data;
BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
void BuildBiTree(BiTree bt, int ps, char *pre,
int is, char *ino, int n)
/* 当前要建立的子树bt的元素总数为n,*/
/* 元素在前序序列pre的起始位置为ps,*/
/* 元素在中序序列ino的起始位置为is */
{
if(n==0)bt=NULL;
e
文档评论(0)