九周 项目1 二叉树算法库
来源:互联网 发布:ni数据采集卡使用入门 编辑:程序博客网 时间:2024/06/06 07:28
/* 烟台大学计算机学院 文件名称:hh.cpp 作者: 李金朴 完成日期:2017年10月29日 问题描述:定义二叉树的链式存储结构,实现其基本运算,并完成测试 输入描述:无 输出描述:输出二叉树,查找后结果,左右孩子 */ //btree.h: #include <stdio.h> typedef char ElemType; typedef struct node { ElemType data; struct node *lchild; struct node *rchild; }BTNode; void CreateBTNode(BTNode *&b,char *str); //由str串创建二叉链 BTNode *FindNode(BTNode *b,ElemType x); //返回data域为x的节点指针 BTNode *LchildNode(BTNode *p); //返回*p节点的左孩子节点指针 BTNode *RchildNode(BTNode *p); //返回*p节点的右孩子节点指针 int BTNodeDepth(BTNode *b); //求二叉树b的深度 void DispBTNode(BTNode *b); //以括号表示法输出二叉树 void DestroyBTNode(BTNode *&b); //销毁二叉树 //btree.cpp: #include <stdio.h> #include <malloc.h> #include "btree.h" #define MaxSize 100 void CreateBTNode(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]; } } void DestroyBTNode(BTNode *&b) { if(b!=NULL) { DestroyBTNode(b->lchild);//销毁左子树 DestroyBTNode(b->rchild);//销毁右子树 free(b);//销毁根结点 } } 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 BTNodeDepth(BTNode *b) { int lchildh; int rchildh; if(b==NULL) return 0;//空树 else { lchildh=BTNodeDepth(b->lchild);//递归求根结点左子树 rchildh=BTNodeDepth(b->rchild);//递归求根结点右子树 { if(lchildh>rchildh) { return lchildh+1; } else { return 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(")"); } } } //main: #include <stdio.h> #include "btree.h" int main() { BTNode *p,*lp,*rp; BTNode *p1; CreateBTNode(p,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");//二叉树建立 DispBTNode(p); if(FindNode(p,'H')!=NULL) { p1=FindNode(p,'H'); if (p1!=NULL) { lp=LchildNode(p1); if (lp!=NULL) printf("\n左孩子为%c\n",lp->data); else printf("\n无左孩子\n"); rp=RchildNode(p1); if (rp!=NULL) printf("右孩子为%c\n",rp->data); else printf("无右孩子\n"); } else printf(" 未找到\n"); } printf("%d\n",BTNodeDepth(p)); printf("销毁树"); DestroyBTNode(p); return 0; }
运行结果:
阅读全文
0 0
- 九周 项目1 二叉树算法库
- 九周 项目1 二叉树算法库
- 九周 项目2 二叉树遍历的递归算法
- 九周 项目2 二叉树遍历的递归算法
- 第十周项目1-二叉树算法
- 【项目1-二叉树算法库】
- 【项目1 - 二叉树算法库】
- 第九周项目1--二叉树算法库
- 第10周 项目1—二叉树算法库
- 第十周 项目1 二叉树算法库
- 第10周—项目1 二叉树算法库
- 第10周实践项目1-二叉树算法库
- 第十周项目1-二叉树算法库
- 第10周、项目1—二叉树算法库
- 第十周项目1二叉树算法库
- 第10周—项目1 - 二叉树算法库
- 第十周实践项目1—二叉树算法库
- 第十周 项目1 二叉树算法库
- 第十周项目二 哈夫曼树
- Java Arraylist实现原理.
- 控制台SQL乱码
- 第八周 项目4-字符串加密
- Linux系统里nw.js里播放jwplayer视频
- 九周 项目1 二叉树算法库
- Intellij Idea安装主题包
- zookeeper实践
- 测试一下
- Android studio 3.0(AS3.0)使用点滴
- eclipse怎么去掉项目的小红点
- hadoop集群常用端口
- 数据结构-平衡搜索二叉树(AVL树)
- tp5控制器的基本使用/tp5前置操作/tp5控制器初始化/tp5空操作/tp5跳转和重定向