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

本文共 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

你可能感兴趣的文章
eclipse插件
查看>>
Android笔记:通过RadioGroup/RadioButton自定义tabhost的简单方法
查看>>
ELCSlider
查看>>
XCode工程中 Targets详解
查看>>
Ext.Msg.prompt的高级应用
查看>>
Postgres 中 to_char 格式化记录
查看>>
关于联合索引
查看>>
开源 java CMS - FreeCMS2.7 登录移动端管理中心
查看>>
Android FM模块学习之三 FM手动调频
查看>>
Python 设置系统默认编码以及其他编码问题大全
查看>>
Vbs脚本编程简明教程之十四
查看>>
如何UDP/TCP端口是否通了
查看>>
pxe实现系统的自动化安装
查看>>
Redis高可用技术解决方案总结
查看>>
Scale Out Owncloud 高可用(2)
查看>>
何为敏捷
查看>>
HA集群之四:Corosync+Pacemaker+DRBD实现HA Mysql
查看>>
服务器定义
查看>>
我的友情链接
查看>>
Javascript覆盖率(jstd)数据解析Maven插件
查看>>