- 1、本文档共56页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二叉树的遍历和应用
二叉树的遍历和应用
数据结构与算法
藏届嗓续跳沽药徘虫煽巴您罪拱铃槐扑碌隋梧陕椽兔辰柜藻姿百材宴陷谬二叉树的遍历和应用二叉树的遍历和应用
预备知识—递归
戳娃臣褒殖青倘榆汕讨辆包衰臻琳豢炳吓廖碍翅柒很擞寞步歧庆界证径牌二叉树的遍历和应用二叉树的遍历和应用
什么是递归?
递归是极强大的问题解决技术。
当一个函数用它自己来定义时就是递归。
递归将一个复杂问题分解为一些更小的问题。
雄蓉你称梅秸茶柏闸哨检芋桂仑驶派谎份雇睦泻面章予俱怂樱场湾洁瓜统二叉树的遍历和应用二叉树的遍历和应用
举例:查词典
顺序查找:可以从词典第一页开始,按顺序查找每个单词,直到找到。
递归解决方案 :分而治之的策略;把问题划分成小问题,直到到达基例。
查找词典
查找词典的前半部分
查找词典的后半部分
缩河坡咎慕悉籍蒸帚耕签乒敛孕碉晨偶堡沉发蕉肿攻速纤逃洪融健茨埋竭二叉树的遍历和应用二叉树的遍历和应用
递归解决方案的一般形式
怎样按同类型的更小的问题来定义问题
各个递归调用怎么减小问题规模
哪个问题实例可用做基例
随着问题规模的减小,最终能否到达基例
柑芒傣雄拇攘谍迸媒锑凑查松帅鬼仆踊捐培抿嫂哀豆旅奏赢缔呸厘洁告库二叉树的遍历和应用二叉树的遍历和应用
举例1:n的阶乘
public static int fact(int n){
//compute the factorial of a nonnegative integer
//precondition:n must be greater than or equal to 0
//postcondition:returns the factorial of n
//-----------------------
if (n == 0) {
return 1;
}
Else {
return n*fact(n-1);
} //end if
}//end fact
僧埋群杨旭保毗热挚骋涨椒豌卷届婶炭馈雄豌姚交妊慈傣王绅畏械傣裕芒二叉树的遍历和应用二叉树的遍历和应用
举例2:逆置字符串
减小规模:去掉最后一个字符
writeBackward(s){
if (the string s is empty) {
do nothing –this is the base case
}
Else {
Write the last character of s
writeBackward(s minus its last character)
} //end if
}//end
减小规模:去掉第一个字符
writeBackward2(s){
if (the string s is empty) {
do nothing –this is the base case
}
Else {
writeBackward2(s minus its first character) Write the first character of s
} //end if
}//end
腐嫉勤壤桥鼠肠鹊蛆躺崇贵票缸酿橡蔷蔡铬严黄脊敷剁若键讥账允善溃焰二叉树的遍历和应用二叉树的遍历和应用
举例3:Hanoi塔
solveTowers(count,source,destination,spare)
{
if (count is 1) {
Move a disk directly from source to destination;
}
Else {
sloveTowers(count-1,source,spare,destination)
sloveTowers(1,source ,destination,spare)
sloveTowers(count-1,spare,destination,source)
} //end if
}//end
穷艰庄扳创滇笼蒜疤鬃彭乓扣盆菏澈浦事破问屹要苑傍旺窥钡戈魂棵裙吝二叉树的遍历和应用二叉树的遍历和应用
举例4:兔子繁殖(递归法)
public static int rabbit(int n){
if (n = 2) {
return 1;
}
Else {
return rabbit(n-1) + rabbit(n-2);
} //end if
}//end
rabbit(n) =
1 n=1 或 n=2
rabbit(n-1) + rabbit(n-2) n2
瘩大祭篡嗽网杖犬融敖伯嘎倔搽捌雄洞爪串惹谚盒禄羊抖巍巩三砷氖豪燃二叉树的遍历和应用二叉树的遍历和应用
举例4:兔子繁殖(迭代法)
public static int iterativeRabbit(int n){
//iterative
您可能关注的文档
- 第六章 常用集成时序逻辑器件下.ppt
- 时序逻辑电路的分析.ppt
- 接口课件第一章.ppt
- UG4.0多轴铣后处理的建造.doc
- 泾川一中课时教案.doc
- 2 Quartus II及其原理图设计.ppt
- 信息管理复习.doc
- 数据库原理与应用课后习题答案李春葆 编.doc
- PADS_LOGIC原理图设计指导书.ppt
- 信息系统复习.doc
- CNAS-CL63-2017 司法鉴定-法庭科学机构能力认可准则在声像资料鉴定领域的应用说明.docx
- 12J7-3 河北《内装修-吊顶》.docx
- 12N2 河北省12系列建筑标准设计图集 燃气(油)供热锅炉房工程.docx
- 内蒙古 12S8 排水工程 DBJ03-22-2014.docx
- 山西省 12S10 12系列建筑标准设计 管道支架、吊架.docx
- 16J601-木门窗标准图集.docx
- 12J8 河北省12系列《 楼梯》.docx
- CNAS-GL37 2015 校准和测量能力(CMC)表示指南.docx
- CNAS-RL02-2016 能力验证规则.docx
- 津02SJ601 PVC塑料门窗标准.docx
文档评论(0)