第十周项目3--利用二叉树遍历思想解决问题(3)
2015-11-06 09:01
423 查看
问题及代码:
二叉树算法库
运行结果:
/* *Copyright(c) 2015, 烟台大学计算机学院 *All rights reserved. *文件名称:求二叉树b的叶子节点个数.cpp *作 者:杜文文 *完成日期:2015年 11月 6日 *问题描述:输出二叉树b的叶子节点。 */
二叉树算法库
#include <malloc.h> #include <stdio.h> #include "btreee.h" int LeafNodes(BTNode *b) //求二叉树b的叶子节点个数 { int num1,num2; if (b==NULL) return 0; else if (b->lchild==NULL && b->rchild==NULL) return 1; else { num1=LeafNodes(b->lchild); num2=LeafNodes(b->rchild); return (num1+num2); } } void CreateBTNode(BTNode *&b,char *str) //由str串创建二叉链 { BTNode *St[MaxSize],*p=NULL; int top=-1,k,j=0; char ch; b=NULL; //建立的二叉树初始时为空 ch=str[j]; while (ch!='\0') //str未扫描完时循环 { switch(ch) { case '(': top++; St[top]=p; k=1; break; //为左节点 case ')': top--; break; case ',': k=2; break; //为右节点 default: p=(BTNode *)malloc(sizeof(BTNode)); p->data=ch; p->lchild=p->rchild=NULL; if (b==NULL) //p指向二叉树的根节点 b=p; else //已建立二叉树根节点 { switch(k) { case 1: St[top]->lchild=p; break; case 2: St[top]->rchild=p; break; } } } j++; ch=str[j]; } } void DestroyBTNode(BTNode *&b) //销毁二叉树 { if (b!=NULL) { DestroyBTNode(b->lchild); DestroyBTNode(b->rchild); free(b); } } int main() { BTNode *b; CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))"); printf("二叉树b的叶子节点个数: %d\n",LeafNodes(b)); DestroyBTNode(b); return 0; }
运行结果:
相关文章推荐
- Repeater连接数据库表的实现隐藏显示列,移动列顺序,列宽
- ajax进行前台到后台传输,传输方式为POST格式时的参数
- Win10 Mobile正式版将在12月份开始推送:将覆盖更多其他设备
- 第十周项目3-利用二叉树遍历思想解决问题(3)求二叉树b的叶子节点个数
- 第九周项目2 对称矩阵压缩存储的实现与应用
- Hubot Slack CoffeeScript
- 报表设计--分组报表-分组小计
- MVC 向页面传值方式总结
- 第九周项目4-广义表算法库及应用
- 第八周--数据结构--建立顺序串算法库
- uva 11572 ——Unique Snowflakes
- 报表设计--单元格公式-设置实例
- myeclipse破解问题
- datagrid 前端对本地数据进行分页操作
- 第十周 项目3-利用二叉树遍历思想解决问题(1)
- 基本字符串压缩
- SQLServer视图
- 关于ShareSDK for Unity的分享界面修改
- 标题:用kill函数传递信号 int kill(pid_t pid,int sig)
- TabHost页和子Activity之间的通讯