全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
寻找二叉树中两个节点的最近的公共祖先迅雷笔试归来分类:C/C+学习笔记2010-10-28 10:38779人阅读评论(4)收藏举报迅雷的笔试可真让人煎熬啊,题量很大,而且考试时间是三个小时。不过迅雷的题目质量很高,既考查了基础知识又不乏高难的数据结构和算法题目。下面和大家分享两道算法编程题,代码没有在编译器上调试,可能会出现一点小bug,感兴趣的朋友可以编译调试一下。题目1:将一个单链表逆转原来的头指针变为尾指针,原来的尾指针变为头指针。算法思想:从链表的头结点开始依次逆转,最终将整个链表逆转。程序代码:view plain1. /*节点的类定义*/2. classNode3. 4. Node*next;5. ;6. 7. /*链表的类定义*/8. classList9. 10. Node*head;11. ;12. 13. /*逆转函数将一个单链表逆转*/14. voidReverseList(List&list)15. 16. Node*pre=NULL;17. Node*cur=list.head;18. Node*back=cur-next;19. 20. while(back!=NULL)21. 22. cur-next=pre;23. pre=cur;24. cur=back;25. back=cur-next;26. 27. 28. 题目2:要求寻找二叉树中两个节点的最近的公共祖先,并将其返回。view plain1. classNode2. 3. Node*left;4. Node*right;5. Node*parent;6. ;7. /*查找p,q的最近公共祖先并将其返回。*/8. Node*NearestCommonAncestor(Node*p,Node*q);算法思想:这道题的关键在于每个节点中包含指向父节点的指针,这使得程序可以用一个简单的算法实现。首先给出p的父节点p-parent,然后将q的所有父节点依次和p-parent作比较,如果发现两个节点相等,则该节点就是最近公共祖先,直接将其返回。如果没找到相等节点,则将q的所有父节点依次和p-parent-parent作比较.直到p-parent=root。程序代码:view plain1. Node*NearestCommonAncestor(Node*root,Node*p,Node*q)2. 3. Node*temp;4. while(p!=NULL)5. 6. p=p-parent;7. temp=q;8. while(temp!=NULL)9. 10. if(p=temp-parent)11. returnp;12. temp=temp-parent;13. 14. 15. 知识拓展:对于第二个二叉树的问题,如果节点中不包含指向父节点的指针应该怎么计算?算法思想:如果一个节点的左子树包含p,q中的一个节点,右子树包含另一个,则这个节点就是p,q的最近公共祖先。程序代码:view plain1. /*查找a,b的最近公共祖先,root为根节点,out为最近公共祖先的指针地址*/2. intFindNCA(Node*root,Node*a,Node*b,Node*out)3. 4. if(root=null)5. 6. return0;7. 8. 9. if(root=a|root=b)10. 11. return1;12. 13. 14. intiLeft=FindNCA(root-left,a,b,out);15. if(iLeft=2)16. 17. return2;18. 19. 20. intiRight=FindNCA(root-right,a,b,out);21. if(iRight=2)22. 23. return2;24. 25. 26. if(iLeft+iRight=2)27. 28. *out=root;29. 30. returniLeft+iRight;31. 32. 33. voidmain()34. 35. Node*root=.;36. Node*a=.;37. Node*b=.;38. Node*out=null;39. inti=FindNCA(root,a,b,&out);40. if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房顶安全合同协议书
- 手机售卖协议书范本
- 手机销售保密协议书
- 打印作业协议书模板
- 打桩头劳务合同范本
- 托管服务协议书范本
- 黔东南苗族侗族自治州国家职业技能鉴定考评员理论考试试卷及答案
- 2025年甘肃省公务员考试行测言语理解专项训练试卷(含答案)
- 投资教育新手指南:耐心与价值投资的启示
- 云技术引领:数字经济的未来发展与创新策略
- 3级高空作业施工方案
- 2022 年全国行业职业技能竞赛- 第十一届全国民政行业职业技能竞赛 孤残儿童护理员项目 参考题库
- 如何预防艾滋病、梅毒、乙肝的母婴传播
- 普通话朗读范文50篇拼音版
- 电力系统分析课程设计
- T-HEBQIA 265-2024 智慧校园一卡通综合管理系统设计规范
- 2024年专业人才引进咨询合同
- 【MOOC】跨文化交际入门-华中师范大学 中国大学慕课MOOC答案
- 篮球赛宣传活动方案
- 腰突症康复治疗
- 沥青路面工程分包合同案例
评论
0/150
提交评论