下载 >  开发技术 >  C > 打印二叉树的图 打印二叉树形状 打印二叉树路径 控制台打印二叉树 字符环境打印二叉树

打印二叉树的图 打印二叉树形状 打印二叉树路径 控制台打印二叉树 字符环境打印二叉树 评分:

/* 这是一个在字符环境中,用ASCII码打印二叉树形状的算法。 在Linux控制台下写的例题,在DOS中稍有点乱。 采用层次遍法。 算法拙劣,仅供初学者做练习,(本人也是初学者,自学数据结构,刚好学到这二叉树这一章, 半路出家,基础差有点吃力头大,搞几个二叉的例题,却不知道其构造形状, 想调用图形API做个美观点的,却有点偏离本章的学习目的,只好用字符打印, linux环境中打印的还可以,DOS中有点不稳定,如果您有更好的算法一定不吝赐教。 我的QQ:137241638 mail:hnflcp@139.com */ #include <stdio.h> #include &l t;stdlib.h> #define MaxSize 100 //Pstart是二叉树根结点在一行中的位置,一行最能打印124个字符,取其1/2。 //如果你的屏不够宽的话,可以输出文本文件里, aa.exe>>aa.txt #define Pstart 40 typedef struct bstnode { int key, data, bf; struct bstnode *lchild, *rchild; }BSTNode; typedef struct pnode //为打印二叉树建了一个结构。 { int key; //关键字数据1 int data; //关键字数据2 struct pnode *lchild, //左孩子 *rchlid, //右孩子 *parent; //父节点 int lrflag, //标记本节点是左孩子(等于0时),还是右孩子(等于1时) space, //存储本节点打印位置 level; //存储本节点所在层次。 }PBSTNode; /*建立二叉树。 用括号表示法表示二叉树字符串,创建二叉树。 */ BSTNode* CreateBSTNode(char *s) { char ch; BSTNode *p=NULL, *b=NULL, *ps[MaxSize]; int top=-1, tag=-1; ch=*s; while(ch) { switch(ch) { case '(':ps[++top]=p;tag=1;break; case ',':tag=2;break; case ')':top--;break; default: p=(BSTNode*)malloc(sizeof(BSTNode)); p->data=ch; p->lchild=p->rchild=NULL; if(b==NULL) b=p; else { switch(tag) { case 1:ps[top]->lchild=p;break; case 2:ps[top]->rchild=p;break; } } } ch=*(++s); } return b; } //用适号表示法打印二叉树。 void DispBSTNode(BSTNode *b) { if(b!=NULL) { printf("%d",b->key); if(b->lchild!=NULL||b->rchild!=NULL) { printf("("); DispBSTNode(b->lchild); if(b->rchild!=NULL)printf(","); DispBSTNode(b->rchild); printf(")"); } } } int BSTNodeHeight(BSTNode *b) { int lchildh,rchildh; if(b==NULL)return 0; else { lchildh=BSTNodeHeight(b->lchild); rchildh=BSTNodeHeight(b->rchild); return (lchildh>rchildh)?(lchildh+1):(rchildh+1); } } /*建立一个二叉树打印结点的信息, 只被int CreatePBSTNode(BSTNode *b,PBSTNode *pqu[])调用*/ void SetPBSTNodeInfo(BSTNode *b,PBSTNode *parent,PBSTNode *pb,int level,int lrflag) { int f=3; pb->data=b->data; pb->key =b->key; pb->parent=parent; pb->level=level; pb->lrflag=lrflag; pb->space=-1; } /*用层次遍历法,BSTNode结构存储的二叉树转换为,PBSTNode结构的二叉树*/ int CreatePBSTNode(BSTNode *b,PBSTNode *pqu[]) { BSTNode *p; BSTNode *qu[MaxSize]; int front=-1, rear=-1; rear++; qu[rear]=b; pqu[rear]=(PBSTNode*)malloc(sizeof(PBSTNode)); SetPBSTNodeInfo(b,NULL,pqu[rear],1,-1); while(rear!=front) { front++; p=qu[front]; if(p->lchild!=NULL) { rear++; qu[rear]=p->lchild; pqu[rear]=(PBSTNode*)malloc(sizeof(PBSTNode)); SetPBSTNodeInfo(p->lchild,pqu[front],pqu[rear],pqu[front]->level+1,0); } if(p->rchild!=NULL) { rear++; qu[rear]=p->rchild; pqu[rear]=(PBSTNode*)malloc(sizeof(PBSTNode)); SetPBSTNodeInfo(p->rchild,pqu[front],pqu[rear],pqu[front]->level+1,1); } } return rear; } //打印一层结点,及该层结点与父结点的连线路径。 void PBSTNodePrint_char(PBSTNode *pb[],int n,int h) { int l=-1, r=0, i,j,k, end; char c; PBSTNode *p; if(n<=0||h<=0) { return; } else if(pb[0]->level==1) { for(i=0;i<pb[0]->space;i++) printf(" "); printf("%c",pb[0]->data); printf("\n"); return; } h=h-pb[0]->level+2; for(k=0;k<h;k++) { j=0; l--; r++; for(i=0;i<n;i++)//打印线条 { p=pb[i]; end=(p->lrflag==0)?l:r; end+=p->parent->space; for(;j<end;j++) printf(" "); c=(p->lrflag==0)?'/':'\\'; printf("%c",c); } printf("\n"); } for(i=0;i<n;i++)//计算本层结点打印位置 { p=pb[i]; if(p->lrflag==0) p->space=p->parent->space+l; else p->space=p->parent->space+r; } for(i=0,j=0;i<n;i++)//打印关键字数据 { p=pb[i]; for(;j<p->space;j++) printf(" "); printf("%c",p->data); } printf("\n"); } //循环打印所有层的数据 void DispBTree(BSTNode *b) { int n,i,j,high, level; PBSTNode *p; PBSTNode *pqu[MaxSize]; PBSTNode *levelpqu[MaxSize]; n=CreatePBSTNode(b,pqu); high=BSTNodeHeight(b); j=0; level=1; pqu[0]->space=Pstart; for(i=0;i<=n;i++) { p=pqu[i]; if(p->level==level) { levelpqu[j]=p; j++; } else { PBSTNodePrint_char(levelpqu,j,high); level=p->level; j=0; levelpqu[j]=p; j++; } } PBSTNodePrint_char(levelpqu,j,high); } void main() { int iDepth=0, iWidth=0, iCount=0; char *str1="A(B(D,E(H,X(J,K(L,M(T,Y))))),C(F,G(X,I)))"; char *str2="A(B(D(,G)),C(E,F))"; BSTNode *b=CreateBSTNode(str1); DispBSTNode(b);printf("\n"); iDepth=BSTNodeHeight(b); printf("Depth:%d\n",iDepth); DispBTree(b); }
...展开详情收缩
分享
收藏 举报

评论 共2条

qq_24022119 能运行,有结果,就是上边有一点乱码,还没调试好,
2015-08-28
回复
asliulin 真是我想要下载的,希望能够可以运行
2012-09-09
回复
打印二叉树形状二叉树的图

/*这是一个在字符环境中,用ASCII码打印二叉树形状的算法。 采用层次遍法。 算法拙劣,仅供初学者做练习,(本人也是初学者,自学数据结构,刚好学到这二叉树这一章,搞几个二叉的例题,却不知道其构造形状,想调用图形API做个美观点的,却有点偏离本章的学习目的,只好用字符打印, linux环境中打印的还可以,DOS屏幕如果不够宽您输出到文本,如果您有更好的算法一定不吝赐教。我的QQ:137241638 mail:hnflcp@139.com*/ void PBTNodePrint(PBTNode *pb[],int n,int h) { int l=-1, r=0, i,j,

立即下载
C语言打印二叉树

打印二叉树,高度为4内的,可完美打印二叉树

立即下载
树实现和树形图打印

功能一:按照树形图打印二叉树,型如: 8 7 11 4 9 10 15 功能2:实现创建一个有序的二叉树 功能3:实现平衡二叉树,对所创建的二叉树进行左旋和右旋,直到成为平衡二叉树。 功能3:按照树中数据删除某个节点,根据数据删除节点,例如:

立即下载
打印二叉树-按照二叉树形状打印

打印二叉树-按照二叉树的形状打印 用C++实现,运行成功

立即下载
横向打印二叉树

创建二叉树,先序遍历二叉树,横向打印二叉树

立即下载
按树状输出二叉树

按树状输出二叉树 按竖向树状打印的二叉树

立即下载
二叉树形状打印二叉树

typedef struct Node//定义一个二叉树结点的结构体 { char data; //每个结点的数值 int num; //数没个结点的编号 struct Node * LChild; struct Node * RChild; }BiTNode,* BiTree; int a=0; void CreateBiTree(BiTree * bt)//创建一个二叉树 { char ch; ch=getchar(); //逐个的为结点赋值 if(ch==' ') * bt=NULL; else { * bt=(BiT

立即下载
二叉树打印

二叉树打印 打印二叉树,当不存在数据时打印*,以根->左子树->右子树(先序遍历)方式打印.

立即下载
二叉树的括号表示法,二叉树的遍历,二叉树的树形打印输出(C++)

根据括号表达式构造二叉树,对二叉树进行前序,中序,后序,层序遍历,并用树形方式打印输出,有详细注释,供C++数据结构课程学习与交流使用。

立即下载
用c#编写的二叉树的图形化显示

这是一个用c#编写的windows应用程序,写的是二叉树在windows窗体上的生成显示

立即下载
树状打印二叉树 C语言课程设计

[问题描述]   按树状形式打印二叉树结构,即二叉树的根在屏幕的最上边,二叉树的左子树在屏幕的左下方,二叉树的右子树在屏幕的右下边。 [测试数据]   由学生依据软件工程的测试技术自己确定。注意测试边界数据,如空二叉树。 [实现提示]   (1)利用RDL遍历方法;   (2)利用结点的深度控制横向位置。

立即下载
前序加中序构造二叉树

生成二叉树,且附有打印二叉树,层次遍历二叉树算法

立即下载
c语言纵向打印出一棵树

c语言打印出一棵树,数据结构课本上是横向打印,这里使用纵向打印。

立即下载
c++二叉树的建立与打印

在计算机科学中,二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。二叉树的每个结点至多只有二棵子树(不存在出度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2的 i -1次方个结点;深度为k的二叉树至多有2^(k) -1个结点;对任何一棵二叉树T,如果其终端结点数(即叶子结点数)为 ,深度为2的结点数为 ,则 = + 1。

立即下载
二叉树的凹入表打印

二叉树的凹入表打印代码,按凹入表形式横向打印任意二叉树结构,即二叉树的根在屏幕的最左边,二叉树的左子树在屏幕的下边,二叉树的右子树在屏幕的上边。

立即下载
JAVA二叉树横向打印

JAVA二叉树横向打印,利用二叉树节点类来完成二叉树的打印。

立即下载
二叉树指定第i层输出以及打印叶子结点

二叉树指定第i层输出以及打印叶子结点,已ac过

立即下载
C语言打印二叉树 重构版

之前发布的单独c文件,太大,不可重用,所以我把它重构了,打散成.h和.c文件,加入了Makefile进行编译。 用tar命令解压后,就可以make 运行了。详情请看readme,之前发布的单独文件也在里面

立即下载
二叉树的简单测试

对二叉树进行前中后序遍历,以及二叉树的括号打印

立即下载
输出二叉树中的叶子结点

二叉树部分关于结点的问题有点难,这是个简单易懂的

立即下载

热点文章

img

spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip

资源所需积分/C币 当前拥有积分 当前拥有C币
5 0 0
点击完成任务获取下载码
输入下载码
为了良好体验,不建议使用迅雷下载
img

打印二叉树的图 打印二叉树形状 打印二叉树路径 控制台打印二叉树 字符环境打印二叉树

会员到期时间: 剩余下载个数: 剩余C币: 剩余积分:0
为了良好体验,不建议使用迅雷下载
VIP下载
您今日下载次数已达上限(为了良好下载体验及使用,每位用户24小时之内最多可下载20个资源)

积分不足!

资源所需积分/C币 当前拥有积分
您可以选择
开通VIP
4000万
程序员的必选
600万
绿色安全资源
现在开通
立省522元
或者
购买C币兑换积分 C币抽奖
img

资源所需积分/C币 当前拥有积分 当前拥有C币
5 4 45
为了良好体验,不建议使用迅雷下载
确认下载
img

资源所需积分/C币 当前拥有积分 当前拥有C币
1 0 0
为了良好体验,不建议使用迅雷下载
VIP和C币套餐优惠
img

资源所需积分/C币 当前拥有积分 当前拥有C币
5 4 45
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
确认下载
下载
您还未下载过该资源
无法举报自己的资源

兑换成功

你当前的下载分为234开始下载资源
你还不是VIP会员
开通VIP会员权限,免积分下载
立即开通

你下载资源过于频繁,请输入验证码

您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:webmaster@csdn.net!

举报

  • 举报人:
  • 被举报人:
  • *类型:
    • *投诉人姓名:
    • *投诉人联系方式:
    • *版权证明:
  • *详细原因: