社区
C语言
帖子详情
如何显示一棵二叉树?
花生小海盗
2004-04-29 07:31:23
从外部输入建立一棵二叉树,用左右孩子链表的存储结构,若想要在输出时显示一棵二叉树,如
A
/ \
B C
\ / \
D E F
/ \
G H
应该怎么做?
...全文
95
5
打赏
收藏
如何显示一棵二叉树?
从外部输入建立一棵二叉树,用左右孩子链表的存储结构,若想要在输出时显示一棵二叉树,如 A / \ B C \ / \ D E F / \ G H 应该怎么做?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sniperHW
2004-05-06
打赏
举报
回复
恩,好问题。我写二叉树时没考虑这个问题。要回去好好研究一下才行
cutestar
2004-04-30
打赏
举报
回复
先计算树的深度,大致确定输出的位置。
bshaozi
2004-04-30
打赏
举报
回复
呵呵
正常输出我也不会
我也问了很久了
void outputTree(btnode* head,int totalSpace)
{
if(head!=NULL)
{
totalSpace+=7;
outputTree(head->rchild,totalSpace);
for(int j=0;j<totalSpace;j++)
cout<<' ';
cout<<head->a<<endl;
outputTree(head->lchild,totalSpace);
}
}
给你一个旋转90度的吧~
chenzhichao2008
2004-04-30
打赏
举报
回复
呵呵,这个我用delphi做过,如果要的话,可以贴出来呵
结构定义
struct node
{
elemtype data;
struct node *left;
struct node *right;
int x,y;//多这样的坐标
}
先设一下根结点位置
前序遍历它,保留父结点,如果当前结点是其左孩子,令左孩子(L.x,L.y)坐标为其父(P.x,P.y)有以下关系;
L.x:=P.x-l;
L.y:=p.y+50;
右孩子 R.x:=P.x+r; R.y:=P.y+50;
在(L.x,L.y)画圆
在(L.x,L.y,P.x,P.y)画一条直线!!!
这样画出就很漂亮呵
bm1408
2004-04-29
打赏
举报
回复
有点难度!
要画线啊!
广义表形式建立
二叉树
,并按层次遍历该
二叉树
二叉树
采用二叉链表结构表示。设计并实现如下算法:输入某棵
二叉树
的广义表形式,建立该
二叉树
,并按层次遍历该
二叉树
数据结构——
二叉树
有关操作程序
一)建立
二叉树
+判空+遍历 (1)以二叉链表作为存储结构,从键盘以先序次序输入各个结点(空格字符表示空树)建立
一棵
二叉树
; (2)对(1)中生成的
二叉树
进行判空; (3)对(1)中生成的
二叉树
进行遍历(分别实现先序遍历、中序遍历、后序遍历); (4) 打印输出(3)的遍历结果; 二)
二叉树
的一些基本操作 (1)返回
二叉树
的根; (2)返回树中某个结点的左孩子,若无则返回“空”; (3)返回树中某个结点的双亲,如果是根结点,则返回“空”; 三) 在(二)的基础上,求
二叉树
的深度+结点数 (1)求出
二叉树
的深度并
显示
; (2)求出
二叉树
的结点总数并
显示
; (3)求叶子结点总数并
显示
。 四)应用题 (1)编制一个递归算法,求一个
二叉树
中位于先序序列中第k个位置的结点的值。 (2)编制一个递归算法,将一个
二叉树
中所有结点的左、右子树相互互换。 (3)编写算法,将一个
二叉树
的所有叶子结点按单链表串联起来。 (4)编写算法,按层序打印
二叉树
的所有结点。
树状
显示
二叉树
和完全
二叉树
判断
1、树状
显示
二叉树
: 编写函数displaytree(
二叉树
的根指针,数据值宽度,屏幕的宽度)输出树的直观示意图。输出的
二叉树
是垂直打印的,同层的节点在同一行上。 问题描述: 假设数据宽度datawidth=2,而屏幕宽度screenwidth为64=26,假设节点的输出位置用 (层号,须打印的空格数)来界定。 第0层:根在(0,32)处输出; 第1层:因为根节点缩进了32个空格,所以下一层的偏移量(offset)为32/2=16=screenwidth/22。即第一层的两个节点的位置为(1,32-offset),(1,32+offset)即(1,16),(1,48)。 第二层:第二层的偏移量offset为screenwidth/23。第二层的四个节点的位置分别是(2,16-offset),(2,16+offset),(2,48-offset),(2,48+offset)即(2,8),(2,24),(2,40),(2,56)。 …… 第i层:第i层的偏移量offset为screenwidth/2i+1。第i层的每个节点的位置是访问第i-1层其双亲节点时确定的。假设其双亲的位置为(i-1,parentpos)。若其第i层的节点是其左孩子,那末左孩子的位置是(i,parentpos-offset),右孩子的位置是(i,parentpos+offset)。 提示:利用
二叉树
的层次遍历算法实现。利用两个队列Q,QI。队列Q中存放节点信息,队列QI中存相应于队列Q中的节点的位置信息,包括层号和需要打印节点值时需要打印的空格数。当节点被加入到Q时,相应的打印信息被存到QI中。
二叉树
本身采用二叉链表存储。 2、完全
二叉树
判断 用一个二叉链表存储的
二叉树
,判断其是否是完全
二叉树
。
数据结构-
二叉树
(Java实现)
编程实现如下功能: 1、假设
二叉树
的结点值是字符,根据输入的一颗
二叉树
的标明了空子树的完整先根遍历序列,建立
一棵
以二叉链表表示的
二叉树
。 2、对
二叉树
进行先根、中根和后根遍历操作,并输出遍历序列,同时观察输出序列是否与逻辑上的序列一致。 3、统计
二叉树
的结点个数和叶子结点个数,并分别输出其值。
二叉树
家谱
家谱管理系统,主要用来管理家族成员的基本信息 1、确定整个程序的功能模块。实现程序的主界面,要对主界面的功能选择输入进行容错处理。 2、实现单个结点信息的录入。 3、对录入日期信息进行合法性检验。 4、采用改变字体颜色的方式突出
显示
主界面的功能项。 5、计算从出生日期到死亡日期的实际天数 6、若家谱树为空,则新建家谱树。实现成员节点的添加。基本功能中可以 强制要求所有成员不同名,即不考虑同名情况(符合小家族的实际情况)。 7、添加成员节点时,可以选择将新添加的节点作为整个家谱的上一代祖先, 或者将新添加的节点作为某个现有成员的孩子。 8、作为某个现有成员的孩子,根据给出的父节点的姓名将该结点添加到相 应位置,注意,针对某一父节点,添加第一个孩子和其它孩子的区别。 9、要求在孩子兄弟
二叉树
中按各个孩子的年龄进行排序。 10、将家谱树保存到二进制文件。注意,不能保存空白节点。 11、从文件读入家谱信息,重建孩子兄弟
二叉树
形式的家谱。 12.从文件中读出所有节点信息到一个数组中,然后按一年中生日的先后进 行快速排序。 13、按姓名查询家谱成员并
显示
该成员的各项信息。 14、给出某一成员的姓名,删除该成员和该成员的所有子孙。 15、成员信息的修改。信息修改时要给出选择界面让用户选择需要修改的信 息项。基本功能中可以限定不容许修改父亲姓名和本人姓名。对日期信 息进行修改时要进行检验。 16、实现层次递进的方式
显示
整个家谱,
显示
结果应该体现家谱树的结构。 17、按各种关键字进行查询,要求给出关键字选择界面,并
显示
符合查询条 件的节点信息。 18、信息统计基本要求包括:平均身高,平均寿命,男女成员各多少,平均 家庭人口数目(假定每个成员构成一个家庭,该家庭的家庭成员是指成 员本人和他的孩子,即家庭人口数=孩子数+1)。要给出统计项的选择界 面. 19、查询某一成员的所有直系亲属。 20、给出某一成员的所有嫡系祖先。 21、确定两人关系。若两人辈分不等,则应指出甲是乙的多少代长辈(晚辈), 甲是否是乙的直系长辈(晚辈),若辈分相同,则应指出是亲兄弟还是多 少代的堂兄弟。
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章