第十周项目3--利用二叉树遍历思想解决问题(4)
2015-11-06 09:14
274 查看
问题及代码:
二叉树算法库
运行结果:
/* *Copyright(c) 2015, 烟台大学计算机学院 *All rights reserved. *文件名称:二叉树遍历思想解决问题.cpp *作 者:杜文文 *完成日期:2015年 11月 6日 *问题描述:设计一个算法Level(b,x,h),返回二叉链b中data值为x的节点的层数。 */
二叉树算法库
#include <malloc.h> #include <stdio.h> #include "btreee.h" int Level(BTNode *b,ElemType x,int h) { int l; if (b==NULL) return 0; else if (b->data==x) return h; else { l=Level(b->lchild,x,h+1); if (l==0) return Level(b->rchild,x,h+1); else return l; } } 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("值为\'K\'的节点在二叉树中出现在第 %d 层上 \n",Level(b,'K',1)); DestroyBTNode(b); return 0; }
运行结果:
相关文章推荐
- Android PackageManagerService流程详细分析(六)之优化系统库
- spark streaming wordcount
- FreeMarker 获取页面request
- Android 触摸事件传递机制
- 截止11月5日,30日内累计跌幅最大的200只股票
- 大S《美容大王》内容80%都是没用的东西
- CSS HTML自学
- 第10周SHH数据结构-【项目2- 二叉树遍历的递归算法 】
- 苹果设备蓝牙接入设计指南
- 第11周 项目1—(二叉树的构造)
- 第六周项目2-建立链栈算法库
- 第十周项目2--二叉树遍历的递归算法
- tomacat启动慢
- Visual Assist X破解版用法
- springMVC下载文件
- 数据网格显示内容
- Android解析大图
- 这些 iOS 面试基础题目,你都深入了解吗?
- xUtils3简介
- CocoPods安装SDWebImage