严蔚敏《数据结构(c语言版)习题集》答案第六章 树和二叉树

严蔚敏《数据结构(c语言版)习题集》答案第六章 树和二叉树

ID:16550363

大小:31.98 KB

页数:29页

时间:2018-08-22

严蔚敏《数据结构(c语言版)习题集》答案第六章 树和二叉树_第1页
严蔚敏《数据结构(c语言版)习题集》答案第六章 树和二叉树_第2页
严蔚敏《数据结构(c语言版)习题集》答案第六章 树和二叉树_第3页
严蔚敏《数据结构(c语言版)习题集》答案第六章 树和二叉树_第4页
严蔚敏《数据结构(c语言版)习题集》答案第六章 树和二叉树_第5页
资源描述:

《严蔚敏《数据结构(c语言版)习题集》答案第六章 树和二叉树》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、严蔚敏《数据结构(c语言版)习题集》答案第六章树和二叉树第六章树和二叉树6.33intIs_Descendant_C(intu,intv)//在孩子存储结构上判断u是否v的子孙,是则返回1,否则返回0{if(u==v)return1;else{if(L[v])if(Is_Descendant(u,L[v]))return1;if(R[v])if(Is_Descendant(u,R[v]))return1;//这是个递归算法}return0;}//Is_Descendant_C6.34intIs_Descendan

2、t_P(intu,intv)//在双亲存储结构上判断u是否v的子孙,是则返回1,否则返回0{for(p=u;p!=v&&p;p=T[p]);if(p==v)return1;elsereturn0;}//Is_Descendant_P6.35这一题根本不需要写什么算法,见书后注释:两个整数的值是相等的.6.36intBitree_Sim(BitreeB1,BitreeB2)//判断两棵树是否相似的递归算法{if(!B1&&!B2)return1;elseif(B1&&B2&&Bitree_Sim(B1->lchil

3、d,B2->lchild)&&Bitree_Sim(B1->rchild,B2->rchild))return1;elsereturn0;}//Bitree_Sim6.37voidPreOrder_Nonrecursive(BitreeT)//先序遍历二叉树的非递归算法{InitStack(S);Push(S,T);//根指针进栈while(!StackEmpty(S)){while(Gettop(S,p)&&p){visit(p->data);push(S,p->lchild);}//向左走到尽头pop(S,p

4、);if(!StackEmpty(S)){pop(S,p);push(S,p->rchild);//向右一步}}//while}//PreOrder_Nonrecursive6.38typedefstruct{BTNode*ptr;enum{0,1,2}mark;}PMType;//有mark域的结点指针类型voidPostOrder_Stack(BiTreeT)//后续遍历二叉树的非递归算法,用栈{PMTypea;InitStack(S);//S的元素为PMType类型Push(S,{T,0});//根结点入栈

5、while(!StackEmpty(S)){Pop(S,a);switch(a.mark){case0:Push(S,{a.ptr,1});//修改mark域if(a.ptr->lchild)Push(S,{a.ptr->lchild,0});//访问左子树break;case1:Push(S,{a.ptr,2});//修改mark域if(a.ptr->rchild)Push(S,{a.ptr->rchild,0});//访问右子树break;case2:visit(a.ptr);//访问结点,返回}}//whi

6、le}//PostOrder_Stack分析:为了区分两次过栈的不同处理方式,在堆栈中增加一个mark域,mark=0表示刚刚访问此结点,mark=1表示左子树处理结束返回,mark=2表示右子树处理结束返回.每次根据栈顶元素的mark域值决定做何种动作.6.39typedefstruct{intdata;EBTNode*lchild;EBTNode*rchild;EBTNode*parent;enum{0,1,2}mark;}EBTNode,EBitree;//有mark域和双亲指针域的二叉树结点类型voidP

7、ostOrder_Nonrecursive(EBitreeT)//后序遍历二叉树的非递归算法,不用栈{p=T;while(p)switch(p->mark){case0:p->mark=1;if(p->lchild)p=p->lchild;//访问左子树break;case1:p->mark=2;if(p->rchild)p=p->rchild;//访问右子树break;case2:visit(p);p->mark=0;//恢复mark值p=p->parent;//返回双亲结点}}//PostOrder_Nonr

8、ecursive分析:本题思路与上一题完全相同,只不过结点的mark值是储存在结点中的,而不是暂存在堆栈中,所以访问完毕后要将mark域恢复为0,以备下一次遍历.6.40typedefstruct{intdata;PBTNode*lchild;PBTNode*rchild;PBTNode*parent;}PBTNode,PBitree;//有双亲指针域的二叉树结点类型vo

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。