第九周项目1
来源:互联网 发布:蓝德资本网络非法传销 编辑:程序博客网 时间:2024/05/22 03:49
/* 烟台大学计算机学院 文件名称:xiangmu.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 100void 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
- 第九周 项目1
- 第九周项目1
- 第九周项目1
- 第九周项目1
- 第九周项目1
- 第九周项目1
- 第九周项目1
- 第九周项目1
- 第九周项目1
- 第九周 【项目1
- 第九周 【项目1
- 第九周 项目1
- 第九周【项目1
- 第九周【项目1
- 第九周项目1
- 第九周项目1
- 招聘季,什么样的数据人才最抢手?
- 旷视科技CTO唐文斌:纯做技术的公司无法持久
- java(Web,EE)项目开发规范参考
- 【抢课】用Python网页爬虫来进行选(qiang)课
- UART, SPI, IIC、485、422、RS232的详解及三者的区别和联系
- 第九周项目1
- 构建反欺诈评价体系新标准,腾讯安全反诈骗实验室重拳反击金融欺诈
- 算法系列(4) leetcode26
- Redis之Twemproxy 介绍与使用-yellowcong
- 机器学习_逻辑回归中梯度下降theta更新公式推导
- 亚马逊宣布137亿美元收购全食超市,与沃尔玛正面对抗
- 天猫对京东618狙击战 映射新的格局与焦虑
- 库克、纳德拉等科技大佬齐聚白宫,都讨论了些啥?
- 从学者到企业家,他是你在医疗机器人领域最想见的人 | CCF-GAIR 2017