范文一:编写递归算法,计算二叉树中叶子结点的数目
学院名称 专业班级 实验成绩
学生姓名 学号 实验日期
课程名称 数据结构 实验题目 2 树 一、实验目的与?要求
熟悉树的各种表示方法?和各种遍历?方式?,掌握有关算法的实现?,了解树在计算机科学及?其它工程技?术中?的应用?。
二、主要仪器设?备
Cfree ?
三、实验内容和原理?
[问题描述]
编写递归算法?,计算二叉树中叶子结点??的数目。
[输入]
一棵二叉树的结点若无?子树?,则可将其子?树看作“.”,输入时,按照前序序列的顺序输?入该结点的?内容?。对例题中的?树,其输入序列?ABD..EH...CF.I..G..。
A ?
BC ? ?
DEFG ? ? ? ?
HI ? ?
[输出]
若为空二叉?树,则输出:THIS IS A EMPTY? BINAR?Y TREE。若二叉树不空?,输出叶子结?点的个数。 [存储结构]
采用二叉链?表存储
[算法的基本思想?]
采用递归方法建立和遍?历二叉树?。首先建立二叉树的根结?点?,然后建立其左右子树?,直到空子树?为止。遍历二叉树,?若某一结点的左右孩子??均为NUL?L,则该结点为?叶子结点。
[参考源程序]?
#include ? #include? struct node{ ? char info; struct node ?*llink, ?*rlink; ? }; typedef struc?t node NODE; ? NODE *creat?e(){ //构造二叉树? char x; NODE *p; scanf("%c", &x); ? print?f("%c", x); //打印出已输?入的二叉树? if(x!='.'){ p=(NODE *)malloc?(sizeo?f(NODE)); p->info=x; p->llink=?create(); ? p->rlink=?create(); ? } else p=NULL; return p; ? } int run(NODE *t){ static int count?=0; ? if(t){ run(t->llink?); //递归遍历左子树?,直到叶子处? run(t->rlink?); //递归遍历右子树?,直到叶子处? if(t->llink ?==NULL && t->rlink ?== NULL) { count++; ? } } return count?; ? } main() { NODE *T; int left_numbe?r; ? print?f("请输入一棵?树:\n" ); T=create(); ? printf("?\n"); if(!T) printf?("This is a empty ?binary tree."); ? else{ left_numbe?r=run(T); ? print?f("\n这棵树共?有 %d 个子叶. \n", left_?numbe?r); } printf("?\n");} 四、实验结果与?分析 (2)习题1:注意叶子结点是指该结?点既没有左?孩子又没有?右孩子?,采用递归算法就很容易?计算出其数??目。 实验结果如?图: 五、实验心得及?体会 本次实验加深了我对树?的各种遍历?方法?。尤其是先序遍历?。在建立树的过程中更是?采取了递归??的方法。有的算 法用递归表示要?比用循环表?示简洁精练?[?如二叉树的遍历?],代码更简洁清晰,可读性更好??有的算法递归能实现? 循环不一定能?实现?,递归的内部实现要消耗?额外的空间?和时间?。所以说循环的效率更高??。 学院名称 专业班级 实验成绩 学生姓名 学号 实验日期 课程名称 数据结构 实验题目 2 树 一、实验目的与要求 熟悉树的各种表示方法和各种遍历方式,掌握有关算法的实现,了解树在计算机科学及其它工程技术中的应用。 二、主要仪器设备 Cfree 三、实验内容和原理 [问题描述] 编写递归算法,计算二叉树中叶子结点的数目。 [输入] 一棵二叉树的结点若无子树,则可将其子树看作“.”,输入时,按照前序序列的顺序输入该结点的内容。对例题中的树,其输入序列ABD..EH...CF.I..G..。 A ? BC ? ? DEFG ? ? ? ? HI ? ? [输出] 若为空二叉树,则输出:THIS IS A EMPTY BINARY TREE。若二叉树不空,输出叶子结点的个数。 [存储结构] 采用二叉链表存储 [算法的基本思想] 采用递归方法建立和遍历二叉树。首先建立二叉树的根结点,然后建立其左右子树,直到空子树为止。遍历二叉树,若某一结点的左右孩子均为NULL,则该结点为叶子结点。 [参考源程序] #include #include struct node{ char info; struct node *llink, *rlink; }; typedef struct node NODE; NODE *create(){ //构造二叉树 char x; NODE *p; scanf("%c", &x); printf("%c", x); //打印出已输入的二叉树 if(x!='.'){ p=(NODE *)malloc(sizeof(NODE)); p->info=x; p->llink=create(); p->rlink=create(); } else p=NULL; return p; } int run(NODE *t){ static int count=0; if(t){ run(t->llink); //递归遍历左子树,直到叶子处 run(t->rlink); //递归遍历右子树,直到叶子处 if(t->llink ==NULL && t->rlink == NULL) { count++; } } return count; } main() { NODE *T; int left_number; printf("请输入一棵树:\n" ); T=create(); printf("\n"); if(!T) printf("This is a empty binary tree."); else{ left_number=run(T); printf("\n这棵树共有 %d 个子叶. \n", left_number); } printf("\n");} 四、实验结果与分析 (2)习题1:注意叶子结点是指该结点既没有左孩子又没有右孩子,采用递归算法就很容易计算出其数目。 实验结果如图: 五、实验心得及体会 本次实验加深了我对树的各种遍历方法。尤其是先序遍历。在建立树的过程中更是采取了递归的方法。有的算 法用递归表示要比用循环表示简洁精练[如二叉树的遍历],代码更简洁清晰,可读性更好有的算法递归能实现 循环不一定能实现,递归的内部实现要消耗额外的空间和时间。所以说循环的效率更高。 总黄酮 生物总黄酮是指黄酮类化合物,是一大类天然产物,广泛存在于植物界,是许多中草药的有效成分。在自然界中最常见的是黄酮和黄酮醇,其它包括双氢黄(醇)、异黄酮、双黄酮、黄烷醇、查尔酮、橙酮、花色苷及新黄酮类等。 简介 近年来,由于自由基生命科学的进展,使具有很强的抗氧化和消除自由基作用的类黄酮受到空前的重视。类黄酮参与了磷酸与花生四烯酸的代谢、蛋白质的磷酸化、钙离子的转移、自由基的清除、抗氧化活力的增强、氧化还原作用、螯合作用和基因的表达。它们对健康的好处有:( 1 ) 抗炎症 ( 2 ) 抗过敏 ( 3 ) 抑制细菌 ( 4 ) 抑制寄生虫 ( 5 ) 抑制病毒 ( 6 ) 防治肝病 ( 7 ) 防治血管疾病 ( 8 ) 防治血管栓塞 ( 9 ) 防治心与脑血管疾病 ( 10 ) 抗肿瘤 ( 11 ) 抗化学毒物 等。天然来源的生物黄酮分子量小,能被人体迅速吸收,能通过血脑屏障,能时入脂肪组织,进而体现出如下功能:消除疲劳、保护血管、防动脉硬化、扩张毛细血管、疏通微循环、活化大脑及其他脏器细胞的功能、抗脂肪氧化、抗衰老。 近年来国内外对茶多酚、银杏类黄酮等的药理和营养性的广泛深入的研究和临床试验,证实类黄酮既是药理因子,又是重要的营养因子为一种新发现的营养素,对人体具有重要的生理保健功效。目前,很多著名的抗氧化剂和自由基清除剂都是类黄酮。例如,茶叶提取物和银杏提取物。葛根总黄酮在国内外研究和应用也已有多年,其防治动脉硬化、治偏瘫、防止大脑萎缩、降血脂、降血压、防治糖尿病、突发性耳聋乃至醒酒等不乏数例较多的临床报告。从法国松树皮和葡萄籽中提取的总黄酮 " 碧萝藏 "-- (英文称 PYCNOGENOL )在欧洲以不同的商品名实际行销应用 25 年之久,并被美国 FDA 认可为食用黄酮类营养保健品,所报告的保健作用相当广泛,内用称之为 " 类维生素 " 或抗自由基营养素,外用称之为 " 皮肤维生素 " 。进一步的研究发现碧萝藏的抗氧化作用比 VE 强 50 倍,比 VC 强 20 倍,而且能通过血脑屏障到达脑部,防治中枢神经系统的疾病,尤其对皮肤的保健、年轻化及血管的健康抗炎作用特别显著。在欧洲碧萝藏已作为保健药物,在美国作为膳食补充品(相当于我国的保健食品),风行一时。随着对生物总黄酮与人类营养关系研究的深入,不远的将来可能证明黄酮类化合物是人类必需的微营养素或者是必需的食物因子。性状:片剂。 功能主治与用法用量 功能主治:本品具有增加脑血流量及冠脉血流量的作用,可用于缓解高血压症状(颈项强痛)、治疗心绞痛及突发性耳聋,有一定疗效。 用法及用量:口服:每片含总黄酮,,,,,每次,片,,日,次。 不良反应与注意 不良反应和注意:目前,暂没有发现任何不良反应. 洛伐他丁 【中文名称】: 洛伐他丁 【英文名称】: Lovastatin 【化学名称】:(S)-2-甲基丁酸-(1S,3S,7S,8S,8aR)-1,2,3,7,8,8a-六氢-3,7-二甲基 -8-[2-(2R,4R)-4-羟基-6氧代-2-四氢吡喃基]-乙基]-1-萘酯 【化学结构式】: 洛伐他丁结构式 【作用与用途】洛伐他丁胃肠吸收后,很快水解成开环羟酸,为催化胆固醇合成的早期限速酶(HMG,coA还原酶)的竞争性抑制剂。可降低血浆总胆固醇、低密度脂蛋白和极低密度脂蛋白的胆固醇含量。亦可中度增加高密度脂蛋白胆固醇和降低血浆甘油三酯。可有效降低无并发症及良好控制的糖尿病人的高胆固醇血症,包括了胰岛素依赖性及非胰岛素依赖性糖尿病。 【 用法用量】口服:一般始服剂量为每日 20mg,晚餐时1次顿服,轻度至中度高胆固醇血症的病人,可以从10mg开始服用。最大量可至每日80mg。 【注意事项】?病人既往有肝脏病史者应慎用本药,活动性肝脏病者禁用。?副反应多为短暂性的:胃肠胀气、腹泻、便秘、恶心、消化不良、头痛、肌肉疼痛、皮疹、失眠等。?洛伐他丁与香豆素抗凝剂同时使用时,部分病人凝血酶原时间延长。使用抗凝剂的病人,洛伐他丁治疗前后均应检查凝血酶原时间,并按使用香豆素抗凝剂时推荐的间期监测。 他汀类药物 他汀类药物(statins)是羟甲基戊二酰辅酶A(HMG-CoA)还原酶抑制剂,此类药物通过竞争性抑制内源性胆固醇合成限速酶(HMG-CoA)还原酶,阻断细胞内羟甲戊酸代谢途径,使细胞内胆固醇合成减少,从而反馈性刺激细胞膜表面(主要为肝细胞)低密度脂蛋白(low density lipoprotein,LDL)受体数量和活性增加、使血清胆固醇清除增加、水平降低。他汀类药物还可抑制肝脏合成载脂蛋白B-100,从而减少富含甘油三酯AV、脂蛋白的合成和分泌。 他汀类药物分为天然化合物(如洛伐他丁、辛伐他汀、普伐他汀、美伐他汀)和完全人工合成化合物(如氟伐他汀、阿托伐他汀、西立伐他汀、罗伐他汀、pitavastatin)是最为经典和有效的降脂药物,广泛应用于高脂血症的治疗。 他汀类药物除具有调节血脂作用外,在急性冠状动脉综合征患者中早期应用能够抑制血管内皮的炎症反应,稳定粥样斑块,改善血管内皮功能。延缓动脉粥样硬化(AS)程度、抗炎、保护神经和抗血栓等作用。 结构比较 辛伐他汀(Simvastatin)是洛伐他汀(Lovastatin)的甲基化衍化物。 美伐他汀(Mevastatin,又称康百汀,Compactin)药效弱而不良反应多,未用于临床。目前主要用于制备它的羟基化衍化物普伐他汀(Pravastatin)。 体内过程 洛伐他汀和辛伐他汀口服后要在肝脏内将结构中的其内酯环打开才能转化成活性物质。 相对于洛伐他汀和辛伐他汀,普伐他汀本身为开环羟酸结构,在人体内无需转化即可直接发挥药理作用,且该结构具有亲水性,不易弥散至其他组织细胞,极少影响其他外周细胞内的胆固醇合成。 除氟伐他汀外,本类药物吸收不完全。 除普伐他汀外,大多与血浆蛋白结合率较高。 用药注意 大多数患者可能需要终身服用他汀类药物,关于长期使用该类药物的安全性及有效性的临床研究已经超过10年。他汀类药物的副作用并不多,主要是肝酶增高,其中部分为一过性,并不引起持续肝损伤和肌瘤。定期检查肝功能是必要的,尤其是在使用的前3个月,如果病人的肝脏酶血检查值高出正常上线的3倍以上,应该综合分析病人的情况,排除其他可能引起肝功能变化的可能,如果确实是他汀引起的,有必要考虑是否停药;如果出现肌痛,除了体格检查外,应该做血浆肌酸肌酸酶的检测,但是横纹肌溶解的副作用罕见。另外,它还可能引起消化道的不适,绝大多数病人可以忍受而能够继续用药。 红曲米 天然降压降脂食品——红曲米 红曲 红曲米又称红曲、红米,主要以籼稻、粳稻、糯米等稻米为原料,用红曲霉菌发酵而成,为 棕红色或紫红色米粒。 红曲米是中国独特的传统食品,其味甘性温,入肝、脾、大肠经。早在明代,药学家李时珍所著《本草纲目》中就记载了红曲的功效:营养丰富、无毒无害,具有健脾消食、活血化淤的功效。上世纪七十年代,日本远藤章教授从红曲霉菌的次生级代谢产物中 发 现 了 能 够 降 低 人 体 血 清 胆 固 醇 的 物 质 莫 纳 可 林 K( Monacolin-k ) 或 称 洛 伐 他 汀 , (Lovastatin) ,引起医学界对红曲米的关注。1985 年,美国科学家 Goldstein 和 Brown 进一 步找出了 Monacolin-k 抑制胆固醇合成的作用机理,并因此获得诺贝尔奖,红曲也由此名声大噪。 红曲米的医疗保健功效如下: 1.降压降脂:研究表明,红曲米中所含的 Monacolin-K 能有效地抑制肝脏羟甲基戊二酰辅酶 还原酶的作用,降低人体胆固醇合成,减少细胞内胆固醇贮存;加强低密度脂蛋白胆固醇的 摄取与代谢,降低血中低密度脂蛋白胆固醇的浓度,从而有效地预防动脉粥样硬化;抑制肝 脏内脂肪酸及甘油三酯的合成,促进脂质的排泄,从而降低血中甘油三酯的水平;升高对人 体有益的高密度脂蛋白胆固醇的水平, 从而达到预防动脉粥样硬化, 甚至能逆转动脉粥样硬 化的作用。 2.降血糖:远藤章教授等人曾直接以红曲菌的培养物做饲料进行动物试验,除确定含有红曲 物的饲料可以有效地使兔子的血清胆固醇降低 18%~25%以上外,又发现所有试验兔子在食 入饲料之后的 0.5 小时内血糖降低 23%~33%,而在 1 小时之后的血糖量比对照组下降了 19%~29%。说明红曲降糖功能显著。 3.防癌功效:红曲橙色素具有活泼的羟基,很容易与氨基起作用,因此不但可以治疗胺血症 且是优良的防癌物质。 4.保护肝脏的作用:红曲中的天然抗氧化剂黄酮酚等具有保护肝脏的作用。 压乐胶囊 压乐胶囊成分 压乐胶囊”唯一成分“红曲酵素”大纪事 1970:红曲米提取6种他汀,制成降脂药世界第一红曲,是寄生在红曲米上,发酵提取 压乐胶囊 的活性生物菌。70年代日本科学家远藤根据《本草纲目》上记载红曲的“活血”功效的启示,从红曲营养液中分离出优良的6种含胆固醇抑制剂和甘油三酯分解剂的红曲菌,被命名为“莫纳可林”即“他汀类”,此后30多年来,红曲米提取的“他汀”被世界医学界公认为最好的降脂药,在临床上大量使用。 2002: 降压史上历史性突破----6种他丁+2种红曲降压素=“红曲酵素” 2002年,震惊世界的生物领域重大发明,红曲中的降糖、降压、抗癌成分(GABA-GLUCOSAMINE)通过发酵提取,在原来6种他丁的基础上合成“红曲酵素(Monacolin-R),经大量的临床试验,这种复合酵素不仅保留了生物他丁的降脂功效,而且它的降血压效果堪比任何药物,《药日新闻》撰文品论,红曲酵素的出现,将开辟降压药新时代。 2008: 6年临床证实“红曲酵素”降血压、治心脑、防猝死、能停药 随后的6年,5万名高血压患者临床运用证实:“红曲酵素”对调理器官微血循环、帮助血液进行重新分配,迅速降压,修复受损心脑肝肾作用显著。而且“红曲酵素”降压同时、养心、护脑、清肝、活肾的功效,达到了降压药的顶峰~“红曲酵素”也被世界医学界誉为“可以媲美青霉素的旷世发现~” “红曲酵素”摘取美国医学界最高荣誉“拉斯克奖” “红曲酵素”的发现者日本Biopharm研究所所长远藤章(74岁),因此项发明被授予美国医学界最高荣誉“拉斯克奖”,纽约市长布隆博格将颁奖理由归结于“数千万人因此得以延长生命~” 通 知 各地消费者: 为了打击假冒伪劣产品,保护消费者利益,公司从2011年4月起, 正式委托国家GMP认证企业 吉林市隆泰参茸制品有限责任公司 生产我公司产品《压乐牌鑫康延平胶囊》(以下简称压乐)。 按照国家规定,《压乐》产品盒子和说明书做以下相应调整: 1.委托生产企业由原来的“山西天特鑫保健食品有限公司”, 改为“吉林市隆泰参茸制品有限责任公司”。 2.生产地址由原来的“山西省大同县马连庄”,改为“吉林 省桦甸市经济开发区”。 3. 产品企业标准由“Q140200TTX009-2010”改为“Q/HDLTS. 09-2011”. 4.卫生许可证由“晋卫食证字(2007)140000-110039号”, 改为吉卫食证字(2008)第220282-SC4348号。 5.增加了食品流通许可证号SP1101051010090481(1-1)。 6.盒子上增加了“数码钞票花纹防伪”技术,包装上的花纹 清晰,仔细观看,花纹中间有“压乐”字样。 北京鑫康胜生物技术开发有限公司 2011年4月6日 本店郑重声明:不卖假货! 每天解释防伪码的问题真的很累~请顾客买之前先看完。厂家因为不让在网上出售,所以我们的防伪码都要刮掉,那个防伪码对于顾客来讲是查询真伪用的,但是对于代理来讲是厂家用来查串货用的,所以我们网上出售一定要撕掉,希望您理解~如果您不能接受的话,请不要拍,免得没有必要的麻烦~以后凡是因为防伪码被撕申请退货的顾客,本店一律不支持~请您考虑好了再拍~~ 我们盒子上的防伪挖掉了一部分,是查不了的,因为厂家严查网上低价串货,厂家可以从防伪数字查出货源,不能接受的请不要拍~绝对正品,收到可以试用几天满意在确认,不满意可以全额退款! 谁能详细给我介绍一下药品串货。谢谢~ 浏览次数:697次悬赏分:0 | 解决时间:2010-9-12 16:15 | 提问者:yanyecc 最佳答案 药品串货是一种违规操作。一般来说药品的经营,在地方都是有代理商,代理商是负责独家供货,而药品的生产厂家也会给予市场保护,每个地区不能出现同样品种的经营代理商。串货是指通过厂家发货到其他的地方,再把药品流通到有生产厂家代理商的地方市场去销售,形成了市场冲撞~ 分享给你的朋友吧: 新浪微博 回答时间:2010-9-2 22:29 药品串货对药厂有什么害处 浏览次数:607次悬赏分:0 | 解决时间:2010-10-22 11:52 | 提问者:匿名 最佳答案 首先明确什么是串货。 串货的种类有以下3种: 1.良性串货:厂商在市场开发的初期,有意或者无意地选中了市场中流通性强的经销商,使其产品迅速流向市场空白区域和非重要区域。 2.恶性串货 :经销商为了获得非正常利润,蓄意向自己辖区外的市场倾销商品。 恶意串货形成的5个大的原因: 1.市场饱和; 2.厂商给予的优惠政策不同; 3.通路发展的不平衡; 4.品牌拉力过大而通路建设没跟上; 5.运输成本不同导致经销商投机取巧。 对厂家来说:——害处 可追溯性差,出了事搞不清状况。 价格体系混乱长远看影响品牌发展。 消费者得不到应有保证,经销商受到打击,不利于渠道建设。 当然也有好处。所以窜货屡禁不止 这里学问不小,可以慢慢交流。 新浪微博 回答时间:2010-10-22 10:20 | 我来评论 压乐胶囊”唯一成分“红曲酵素”大纪事 1970:红曲米提取6种他汀,制成降脂药世界第一 红曲,是寄生在红曲米上,发酵提取的活性生物菌。70年代日本科学家远藤根据《本草纲目》上记载红曲的“活血”功效的启示,从红曲营养液中分离出优良的6种含胆固醇抑制剂和甘油三酯分解剂的红曲菌,被命名为“莫纳可林”即“他汀类”,此后30多年来,红曲米提取的“他汀”被世界医学界公认为最好的降脂药,在临床上大量使用。 2002:降压史上历史性突破----6种他丁+2种红曲降压素=“红曲酵素” 2002年,震惊世界的生物领域重大发明,红曲中的降糖、降压、抗癌成分(GABA-GLUCOSAMINE)通过发酵提取,在原来6种他丁的基础上合成“红曲酵素(Monacolin-R),经大量的临床试验,这种复合酵素不仅保留了生物他丁的降脂功效,而且它的降血压效果堪比任何药物,《药日新闻》撰文品论,红曲酵素的出现,将开辟降压药新时代。 2008:6年临床证实“红曲酵素”降血压、治心脑、防猝死、能停药 随后的6年,5万名高血压患者临床运用证实:“红曲酵素”对调理器官微血循环、帮助血液进行重新分配,迅速降压,修复受损心脑肝肾作用显著。而且“红曲酵素”降压同时、养心、护脑、清肝、活肾的功效,达到了降压药的顶峰~“红曲酵素”也被世界医学界誉为“可以媲美青霉素的旷世发现~” ?“红曲酵素”摘取美国医学界最高荣誉“拉斯克奖” 研究所所长远藤章(74岁),因此项发明被授予美国医学界最高荣誉“拉“红曲酵素”的发现者日本Biopharm 斯克奖”,纽约市长布隆博格将颁奖理由归结于“数千万人因此得以延长生命~” “压乐胶囊”1粒见效,当天停服所有西药 6个月血压彻底稳定,并发症消失,实现终身停药。 “压乐胶囊”是目前世界上第一个纯生物制剂降压新品,独含的“红曲酵素”成分能调理心脑肝肾器官微循环,帮助血液进行重新分配,减少心脏压力,清除血液垃圾,软化血管,达到不让血压升起来的目的,修复受损心脑肝肾,达到源头治疗高血压的目的。 1粒见效,当天可停服降压西药,3—7天平稳血压 头痛,头晕,耳鸣,胸闷,乏力等症状逐渐改善,7天后,睡的香了,眩晕症状消失,脑供血不足,心肌缺血等症状明显好转,可减少服用量。 1个月内,逐渐减少“压乐胶囊”的服用量, 3天服一粒 血液流动越来越通畅,血压平稳,血脂,血粘度降低。高血压各项指标逐渐恢复正常,腿脚有力,精神好,脑中风、冠心病、心肌梗塞等危险解除。 6个月内,60%高血压患者可停掉“压乐胶囊” 随着患者心、脑、肝、肾器官得到全面修复,心脑肝肾功能恢复年轻态,血液分布完全正常,血液干净,血管有弹性,血压持续平稳,6个月内1期高血压患者达到临床治愈,即可停药。2期高血压患者只需5-10天服用1粒,即可保持血压持续平稳,冠心病、心绞痛等临床症状消失。3期高血压患者冠心病、心梗、中风后遗症得到良好治疗,2-3天服用1粒,不再担心血压高、心梗、中风反复发作,并发症恶化。 根源阻击高血压,不让血压升起来 全面逆转并发症,拯救心脑肝肾 #include "stdio.h" #include "malloc.h" #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int ElemType; typedef struct BiTNode{ ElemType data; struct BiTNode *lchild,*rchild;//左右孩子指针 } BiTNode,*BiTree; Status InsertBiTree(BiTree &T,int e) //插入新结点 { if(T==NULL){ T=(BiTNode *)malloc(sizeof(BiTNode)); T->data=e;T->lchild=NULL; T->rchild=NULL; return 1; } if(T->data InsertBiTree(T->rchild,e); else InsertBiTree(T->lchild,e); return 0; } Status PrintElement( ElemType e ) { // 输出元素e的值 printf("%d ", e ); return OK; }// PrintElement Status PreOrderTraverse( BiTree T, Status(*Visit)(ElemType) )//前序遍历二叉树 { if(T==NULL) return 0; Visit( T->data ); PreOrderTraverse(T->lchild,Visit); PreOrderTraverse(T->rchild,Visit); return OK; } // PreOrderTraverse Status InOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) //中序遍历二叉树 { if(T==NULL) return 0; InOrderTraverse(T->lchild,Visit); Visit(T->data); InOrderTraverse(T->rchild,Visit); return 1; } // InOrderTraverse Status PostOrderTraverse( BiTree T, Status(*Visit)(ElemType) )//后序遍历二叉树 { if(T==NULL) return 0; PostOrderTraverse(T->lchild,Visit); PostOrderTraverse(T->rchild,Visit); Visit(T->data); return 1; } // PostOrderTraverse void TreeCount(BiTree T,int &count)//树的结点数 { //补充内容 if(T) { count++; TreeCount(T->lchild,count); TreeCount(T->rchild,count); } } int main() //主函数 { BiTree T=NULL; int e; //生成二叉排序树T scanf("%d",&e); while(e!=-1) { InsertBiTree(T,e); scanf("%d",&e); } //前、中、后序遍历二叉树 PreOrderTraverse(T,PrintElement); printf("\n"); InOrderTraverse(T,PrintElement); printf("\n"); PostOrderTraverse(T,PrintElement); printf("\n"); //计数并输出 e=0; TreeCount(T,e); printf("%d\n",e); return 0;//补充代码 }//main #include "stdio.h" #include "malloc.h" struct node{ char data; struct node *lchild , *rchild; } bnode; typedef struct node *blink; int n=0,no=0; void preorder(blink bt) { if(bt) { n++; if(bt->lchild==NULL&&bt->rchild==NULL) no++; preorder(bt->lchild); preorder(bt->rchild); } } int Depth(blink bt) // 返回二叉树的深度 { int depthval,depthLeft,depthRight; if (!bt) depthval=0; else { depthLeft=Depth(bt->lchild); depthRight=Depth(bt->rchild); depthval=1+(depthLeft>depthRight ?depthLeft:depthRight); } return depthval; } blink creat() { blink bt; char ch; ch=getchar(); if (ch!='#') { bt=(blink)malloc(sizeof(bnode)); bt->data=ch; bt->lchild=creat(); bt->rchild=creat(); } else bt=NULL; return bt; } main() { blink root; int shengdu; root=creat(); preorder(root); shengdu=Depth(root); printf("number of node: %d\n number of leaf: %d \n" , n , no); printf("the deep of the tree is: %d",shengdu); printf("\n"); } 设二叉树采用链式存储结构,试设计一个算法计算一棵给定二叉树中叶子结点的数目 include include define max 10 typedef struct node char data node lchildrchild Bitree Bitree Bmax Bitree Creatree //建立二叉树 Bitree TS char ch int frontrearsign sign0 front0 rear-1 TNULL printf建立二叉 树:n chgetchar whilech ifch //输入结点不是虚结点 SBitree mallocsizeofBitree S-datach S-lchildS-rchildNULL rear BrearS ifrearfront TS sign else ifsign21 //寻找父结点 Bfront-lchildS ifsign20 Bfront-rchildS front sign else //输入结点为虚结点 ifsign20 front sign chgetchar return T int SearchleafBitree T //计算叶子数 ifTNULL return 0 else ifT-lchildNULLT-rchildNULL return 1 else returnSearchleafT-lchildSearchleafT-rchild void visitBitree T printfcnT-data void InorderBitree T //中序 遍历二叉树 ifTNULL InorderT-lchild visitT InorderT-rchild void main Bitree T TCreatree printf中序 遍历:n InorderT printf叶子数dnSearchleafT 题目 设二 叉树采用链式存储结构个算法计算一棵给定 二叉树中叶子结点的数目。 问题分析 本程序要求在 一棵二叉树中实现计算叶子结点数目的功能为完成上 述功能需要解决的关键问题是建立二叉树过程及查找 叶子结点过程。 概要设计 ?建立一个以二叉链表方式存储的二叉树输入结点信息时按照完全二叉树的结点顺序输入。 ?先序遍历二叉树并判断遍历的根是否是叶子结点若是并记录叶子结点个数。叶子结点判断条件为左孩子域和右孩子域都为空。 详细设计 ?建立二叉树时按照完全二叉树的结点顺序输入表示虚结点表示输入结束。 若不是虚结点时则建立一个新结点并且将其作为左孩子或右孩子结点连接到它的父结点上第一个结点无父结点若是虚结点则将空结点NULL作为左孩子或右孩子结点连接到它的父节点上。 ?查找叶子结点利用递归先序遍历二叉树方法来查找叶子结点当遍历一个根结点时判断其左孩子域和右孩子域是否都为空若都为空则该结点是叶子结点并用记录叶子个数否则不是叶子结点。 调试分析及小结 错误及分析当按照完全二叉树的结点顺序输入ABCDE后程序无法运行。经测试发现在建立二叉树时出现问题。 当扫描到B时执行else ifsign21 Bfront-lchildS Sign ifsign20 Bfront-rchildS front sign 注执行上述程序前sign1Bfront指向关键字为A的结点。 当一个if语句段执行完后关键字为A的结点的左孩子为关键字为B的结点sign2。此时本应结束else语句段但由于sign2则第二个if语句条件为真继续执行因此导致程序执行 出错。 改正在if语句外置sign改正后代码如下 else ifsign21 Bfront-lchildS ifsign20 Bfront-rchildS front sign 转载请注明出处范文大全网 » 编写递归算法,计算二叉树中叶范文二:编写递归算法,计算二叉树中叶子结点的数目。
范文三:9493 计算二叉树的结点个数
范文四:二叉树的叶子结点以及深度数目
范文五:设二叉树采用链式存储结构,试设计一个算法计算一棵给定二叉树中叶子结点的数目