博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构二叉树(实训报告)
阅读量:5936 次
发布时间:2019-06-19

本文共 2650 字,大约阅读时间需要 8 分钟。

#include
#include
typedef char TElemType;typedef struct node{ TElemType data; //结点数据 struct node *lchild,*rchild; //左右子女指针 }BinTNode, *BinTree; //二叉树定义 //创建二叉树void createBinTree_Pre(BinTNode *&T,TElemType pre[],int &n){ TElemType ch = pre[n++]; if(ch == ';') return; if(ch != '#'){ T = (BinTNode*) malloc (sizeof(BinTNode)); //递归根节点 T->data=ch; createBinTree_Pre(T->lchild,pre,n); //递归建立左子树 createBinTree_Pre(T->rchild,pre,n); //递归建立右子树 }else T = NULL; //否则建立空子树 };//以广义表的形式输出二叉树void PrintBinTree (BinTNode *T){ if(T!=NULL){ printf("%c",T->data); if(T->lchild!=NULL||T->rchild!=NULL){ printf("("); PrintBinTree(T->lchild); printf(","); PrintBinTree(T->rchild); printf(")"); } }} //二叉树的总结点数int Nodenum(BinTNode *T){ if(T == NULL){ return 0; }else{ return 1+Nodenum(T->lchild)+Nodenum(T->rchild); }} //计算二叉树的高度int Height(BinTNode *T){ if(T==NULL) return 0; //递归结束;空树高度为0 else{ int i= Height(T->lchild); int j= Height(T->rchild); return (i
lchild == NULL)&&(T->rchild == NULL)){ return 1; }else { return (Leafnum (T->lchild)+Leafnum (T->rchild)); }}//输入结点找双亲结点 BinTNode *getParent (BinTNode *T,TElemType key){ if((T->lchild!=NULL&&T->lchild->data==key)||(T->rchild!=NULL)&&T->rchild->data==key){ return T; }else { getParent(T->lchild,key); getParent(T->rchild,key); } return NULL;} //输入结点找左孩子和右孩子结点BinTNode *getNodenum(BinTNode *T,TElemType key){ if(T != NULL&&T->data == key){ return T; }else { getNodenum (T->lchild,key); getNodenum (T->rchild,key); } return NULL;} main(){ BinTree T; BinTree Parent,leftChild,rightChild; char key; BinTree Temp; char a[100]={
'A','B','C','#','#','D','E','#','#','#','F','#','#',';'}; int i=0; createBinTree_Pre(T,a,i); printf("二叉树用广义表表示为:"); PrintBinTree(T); printf("\n二叉树的高度为:%d",Height(T)); printf("\n二叉树的总结点为:%d",Nodenum(T)); printf("\n二叉树的叶子结点为:%d",Leafnum(T)); printf("\n请输入需要查找的双亲结点的结点:"); scanf("%c",&key); getchar(); Parent = getParent(T,key); printf("输入的节点的双亲点的数据是:%c\n",Parent->data); printf("请输入需要查找左右孩子结点的结点:"); scanf("%c",&key); getchar(); Temp = getNodenum(T,key); leftChild = Temp->lchild; rightChild = Temp->rchild; printf("您输入的节点的左孩子节点数据是:%c\n",leftChild->data); printf("您输入的节点的右孩子节点数据是:%c\n",rightChild->data);}

 

转载于:https://www.cnblogs.com/lvzhiqi/p/10952022.html

你可能感兴趣的文章
清橙A1202&Bzoj2201:彩色圆环
查看>>
使用data pump工具的准备
查看>>
springMVC---级联属性
查看>>
get和post区别
查看>>
crontab执行shell脚本日志中出现乱码
查看>>
cmd.exe启动参数说明
查看>>
《随笔记录》20170310
查看>>
网站分析系统
查看>>
一站式解决,Android 拍照 图库的各种问题
查看>>
从零开始来看一下Java泛型的设计
查看>>
Shell编程基础
查看>>
Shell之Sed常用用法
查看>>
3.1
查看>>
校验表单如何摆脱 if else ?
查看>>
JS敏感信息泄露:不容忽视的WEB漏洞
查看>>
让我们荡起双桨,Android 小船波浪动画
查看>>
分布式memcached服务器代理magent安装配置(CentOS6.6)
查看>>
Create Volume 操作(Part III) - 每天5分钟玩转 OpenStack(52)
查看>>
tomcat 8.0虚拟机配置文档
查看>>
pxc群集搭建
查看>>