博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构实验十一——树的基本操作
阅读量:5814 次
发布时间:2019-06-18

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

#include 
#include
typedef struct BiNode{ char data; struct BiNode *lchild,*rchild;}BiNode,*BiTree;void CreateTree(BiTree *T)//输入有技巧!!{ char ch; scanf("%c",&ch); if(ch==' ') *T=NULL; else { *T=(BiTree)malloc(sizeof(BiNode)); (*T)->data=ch; CreateTree(&(*T)->lchild); CreateTree(&(*T)->rchild); }}void PreDisplay(BiTree T){ if(T) { printf("%c",T->data); PreDisplay(T->lchild); PreDisplay(T->rchild); }}void InDisplay(BiTree T){ if(T) { InDisplay(T->lchild); printf("%c",T->data); InDisplay(T->rchild); }}void PostDisplay(BiTree T){ if(T) { PostDisplay(T->lchild); PostDisplay(T->rchild); printf("%c",T->data); }}void Display(BiTree T){ if(T) { printf("%c",T->data); if(T->lchild!=NULL||T->rchild!=NULL) { printf("("); if(T->lchild!=NULL) Display(T->lchild); printf(","); if(T->rchild!=NULL) Display(T->rchild); printf(")"); } }}int NodeNum(BiTree T){ if(T==NULL) return 0; else if(T->lchild==NULL&&T->rchild==NULL) return 1; else return NodeNum(T->lchild)+NodeNum(T->rchild)+1;}int LeafNodeNum(BiTree T){ if(T==NULL) return 0; else if(T->lchild==NULL&&T->rchild==NULL) return 1; else return LeafNodeNum(T->lchild)+LeafNodeNum(T->rchild);}int DeepthTree(BiTree T){ if(T==NULL) return 0; else if(DeepthTree(T->lchild)>DeepthTree(T->rchild)) return 1+DeepthTree(T->lchild); else return 1+DeepthTree(T->rchild);}BiTree FindNode(BiTree T,char e){ BiTree p; if(T==NULL){ printf("tree empty!\n"); return NULL; } else if(T->data==e) return T; else { p=FindNode(T->lchild,e); if(p!=NULL) return p; else return FindNode(T->rchild,e); }}void Display2(BiTree T){ BiTree S[20],p; int level[100][2],top=-1,n,i; char e; if(T) { top++; S[top]=T; level[top][0]=1; level[top][1]=2; while(top>-1) { p=S[top]; n=level[top][0]; switch(level[top][1]) { case 0: e='L'; break; case 1: e='R'; break; case 2: e='B'; break; } for(i=0;i
data,e); for(i=n+1;i<40;i+=2) printf("--"); printf("\n"); top--; if(p->rchild!=NULL) { top++; S[top]=p->rchild; level[top][1]=1; level[top][0]+=4; } if(p->lchild!=NULL) { top++; S[top]=p->lchild; level[top][1]=0; level[top][0]+=4; } } }}int main(){ BiTree T; printf("请按先序遍历依次输入二叉树:\n"); CreateTree(&T); printf("二叉树的先序遍历是:\n"); PreDisplay(T); printf("\n"); printf("二叉树的中序遍历是:\n"); InDisplay(T); printf("\n"); printf("二叉树的后序遍历是:\n"); PostDisplay(T); printf("\n"); printf("二叉树的广义表输出:\n"); Display(T); printf("\n"); printf("二叉树的凹形输出:\n"); Display2(T); printf("\n"); printf("二叉树T是%s\n",(T==NULL)?"empty tree":"no empty tree"); printf("二叉树T的节点个数=%d\n",NodeNum(T)); printf("二叉树T的叶子节点个数=%d\n",LeafNodeNum(T)); printf("二叉树T的深度=%d\n",DeepthTree(T)); return 0;}
大量参考了资料书的代码!对非线性的数据结构还是不熟悉!

转载于:https://www.cnblogs.com/abc-24990/p/4257469.html

你可能感兴趣的文章
Java重写equals方法和hashCode方法
查看>>
Spring ’14 Wave Update: Installing Dynamics CRM on Tablets for Windows 8.1
查看>>
MySQL 备份与恢复
查看>>
TEST
查看>>
PAT A1037
查看>>
(六)Oracle学习笔记—— 约束
查看>>
[Oracle]如何在Oracle中设置Event
查看>>
top.location.href和localtion.href有什么不同
查看>>
02-创建hibernate工程
查看>>
svn命令在linux下的使用
查看>>
Gradle之module间依赖版本同步
查看>>
java springcloud版b2b2c社交电商spring cloud分布式微服务(十五)Springboot整合RabbitMQ...
查看>>
10g手动创建数据库
查看>>
Windwos Server 2008 R2 DHCP服务
查看>>
UVa 11292 勇者斗恶龙(The Dragon of Loowater)
查看>>
d3 v4实现饼状图,折线标注
查看>>
微软的云策略
查看>>
Valid Parentheses
查看>>
性能测试之稳定性测试
查看>>
ES6的 Iterator 遍历器
查看>>