好文档 - 专业文书写作范文服务资料分享网站

数据结构课后习题及解析第六章

天下 分享 时间: 加入收藏 我要投稿 点赞

【解答】

6.15分别写出算法,实现在中序线索二叉树T中查找给定结点*p在中序序列中的前驱与后继。在先序线索二叉树T中,查找给定结点*p在先序序列中的后继。在后序线索二叉树T中,查找给定结点*p在后序序列中的前驱。

(1)找结点的中序前驱结点

BiTNode *InPre (BiTNode *p)

文档

/*在中序线索二叉树中查找p的中序前驱结点,并用pre指针返回结果*/ { if (p->Ltag= =1) pre = p->LChild; /*直接利用线索*/ else

{/*在p的左子树中查找“最右下端”结点*/ for ( q=p->LChild; q->Rtag= =0; q=q->RChild); pre = q; }

return (pre); }

(2)找结点的中序后继结点

BiTNode *InSucc (BiTNode *p)

/*在中序线索二叉树中查找p的中序后继结点,并用succ指针返回结果*/ { if (p->Rtag= =1) succ = p->RChild; /*直接利用线索*/ else

{/*在p的右子树中查找“最左下端”结点*/ for ( q=p->RChild; q->Ltag= =0; q=q->LChild); succ= q; }

return (succ); }

(3) 找结点的先序后继结点

BiTNode *PreSucc (BiTNode *p)

/*在先序线索二叉树中查找p的先序后继结点,并用succ指针返回结果*/ { if (p->Ltag= =0) succ = p->LChild; else succ= p->RChild; return (succ);

文档

}

(4) 找结点的后序前驱结点

BiTNode *SuccPre (BiTNode *p)

/*在后序线索二叉树中查找p的后序前驱结点,并用pre指针返回结果*/ { if (p->Ltag= =1) pre = p->LChild; else pre= p->RChild; return (pre); }

6.21已知二叉树按照二叉链表方式存储,利用栈的基本操作写出先序遍历非递归形式的算法。 【解答】

Void PreOrder(BiTree root) /*先序遍历二叉树的非递归算法*/ {

InitStack(&S); p=root;

while(p!=NULL || !IsEmpty(S) ) { if(p!=NULL) {

Visit(p->data); push(&S,p); p=p->Lchild;

}

else {

Pop(&S,&p); p=p->RChild; }

文档

} }

6.24已知二叉树按照二叉链表方式存储,编写算法,将二叉树左右子树进行交换。 【解答】 算法(一)

Void exchange ( BiTree root )

{

p=root;

if ( p->LChild != NULL || p->RChild != NULL )

{

temp = p->LChild;

p->LChild = p->RChild;

p->RChild = temp; exchange ( p->LChild ); exchange ( p->RChild ); } } 算法(二)

Void exchange ( BiTree root )

{

p=root;

if ( p->LChild != NULL || p->RChild != NULL )

{

exchange ( p->LChild ); exchange ( p->RChild );

文档

temp = p->LChild;

p->LChild = p->RChild;

p->RChild = temp; } }

第六章 习题解析

1.试分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。 2.对题1所得各种形态的二叉树,分别写出前序、中序和后序遍历的序列。

3.已知一棵度为k的树中有n1个度为1的结点,n2个度为2的结点,……,nk个度为k的结点,则该树中有多少个叶子结点? [提示]:参考 P.116 性质3 ∵ n=n0 + n1 + …… + nk

B=n1 + 2n2 + 3n3 + …… + knk n= B + 1

∴ n0 + n1 + …… + nk = n1 + 2n2 + 3n3 + …… + knk + 1 ∴ n0 = n2 + 2n3 + …… + (k-1)nk + 1

4.假设一棵二叉树的先序序列为EBADCFHGIKJ,中序序列为ABCDEFGHIJK,请画出该二叉树。

文档

数据结构课后习题及解析第六章

【解答】6.15分别写出算法,实现在中序线索二叉树T中查找给定结点*p在中序序列中的前驱与后继。在先序线索二叉树T中,查找给定结点*p在先序序列中的后继。在后序线索二叉树T中,查找给定结点*p在后序序列中的前驱。(1)找结点的中序前驱结点BiTNode*InPre(BiTNode*p)<
推荐度:
点击下载文档文档为doc格式
1yph694c7p797950lpza3sk4u09qm100fhg
领取福利

微信扫码领取福利

微信扫码分享