第十周项目1 建立二叉树算法库
2015-11-09 16:53
267 查看
问题与代码
//head.h
//main.cpp
//zdy.cpp
运行结果
知识点总结
二叉树中的算法中,最重要的是要去了解递归,递归算法是一种,看起来简单而且好理解,但并不好“理解”
的算法,应该在这方面不断锻炼自己。
/* *Copyright (c) 2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:head.h,main.cpp,zdy.cpp *作者:陈梦萍 *完成日期:2015年11月09日 *版本号:v1.0 * *问题描述: 建立二叉树算法库 *输入描述:输入测试数据 *程序输出:若干数据 */
//head.h
#include<stdio.h> #include<malloc.h> #define maxsize 100 typedef char ElemType; typedef struct node { ElemType data; struct node *lchild; struct node *rchild; }btnode; void creatbtnode(btnode *&b,char *str); btnode *findnode(btnode *b,ElemType x); btnode *lchildnode(btnode *p); btnode *rchildnode(btnode *p); int btnodeheight(btnode *b); void dispbtnode(btnode *b); void destroybtnode(btnode *&b);
//main.cpp
#include"head.h" int main() { btnode *b,*p,*lp,*rp;; printf(" (1)创建二叉树:"); creatbtnode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))"); printf("\n"); printf(" (2)输出二叉树:"); dispbtnode(b); printf("\n"); printf(" (3)查找k节点:"); p=findnode(b,'K'); if (p!=NULL) { lp=lchildnode(p); if (lp!=NULL) printf("左孩子为%c ",lp->data); else printf("无左孩子 "); rp=rchildnode(p); if (rp!=NULL) printf("右孩子为%c",rp->data); else printf("无右孩子 "); } else printf(" 未找到!"); printf("\n"); printf(" (4)二叉树b的深度:%d\n",btnodeheight(b)); printf(" (5)释放二叉树b\n"); destroybtnode(b); return 0; }
//zdy.cpp
#include"head.h" void creatbtnode(btnode *&b,char *str) { btnode *st[maxsize],*p; int top=-1,k,j=0; char ch; b=NULL; ch=str[j]; while(ch!='\0') { 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) b=p; else { switch(k) { case 1: st[top]->lchild=p; break; case 2: st[top]->rchild=p; break; } } } j++; ch=str[j]; } } btnode *findnode(btnode *b,ElemType x) { btnode *p; if(b==NULL) return NULL; else if(b->data==x) return b; else { p=findnode(b->lchild,x); if(p!=NULL) return p; else return findnode(b->rchild,x); } } btnode *lchildnode(btnode *p) { return p->lchild; } btnode *rchildnode(btnode *p) { return p->rchild; } int btnodeheight(btnode *b) { int lchildh,rchildh; if(b==NULL) return(0); else { lchildh=btnodeheight(b->lchild); rchildh=btnodeheight(b->rchild); return(lchildh>rchildh)?(lchildh+1):(rchildh+1); } } void dispbtnode(btnode *b) { if(b!=NULL) { printf("%c",b->data); if(b->lchild!=NULL||b->rchild!=NULL) { printf("("); dispbtnode(b->lchild); if(b->rchild!=NULL) printf(","); dispbtnode(b->rchild); printf(")"); } } } void destroybtnode(btnode *&b) { if(b!=NULL) { destroybtnode(b->lchild); destroybtnode(b->rchild); free(b); } }
运行结果
知识点总结
二叉树中的算法中,最重要的是要去了解递归,递归算法是一种,看起来简单而且好理解,但并不好“理解”
的算法,应该在这方面不断锻炼自己。
相关文章推荐
- nfs挂载根文件系统笔记
- Codeforces Round #330 (Div. 2)B Pasha and Phone
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- 函数的可重入性(reentrant)及线程安全
- iOS在线播放视频
- 在JS中如何实现动作
- Delphi PDF
- 使用jquery获取radio的值
- linux eclipse中C++连接mysql数据库
- 第十一周项目2-用二叉树求解算数表达式
- 软件工程c编码随笔
- swift 快速奔跑的兔几 本节的内容是:SpriteKit第三讲 纹理和纹理贴图集
- cocos2d-x 左下角的FPS,3行数字分别表示什么?
- Spring注解详解
- Ionic中集成和卸载 Crosswalk
- DAO层,Service层,Controller层、View层介绍
- struts2搭建项目的架包(2)
- 新的軟件質量評估方法--權重計算
- GitHub控件之BadgeView(数字提醒)
- 错误:You can't specify target table 'xxx' for update in FROM clause的解决