寻找所有最大子树...

xishiru 2004-10-21 08:50:56
给定两棵二叉树,求出它们所有节点数大于等于2的最大子树。
二叉树的子树,是指去掉这棵二叉树的某些节点以及与这些节点相连的枝而得到的二叉树。设T为二叉树,R为它的子树,如果不存在二叉树S,使得R为S的子树且S为T的子树,那么称R为T的最大子树。
数据从文件c:\data.txt输入,共8行,每棵二叉树4行。第一行是二叉树的节点数;第二行是节点的内容,按照层次遍历排列;同时对于每个节点,我们按照层次遍历的顺序给它们编号,第一个节点即根节点编号为0,第二个节点编号为1,……;第三行是各节点的左子节点指针,表示左子节点在层次遍历中的位置编号,如果没有左子节点,则为-1;第四行是各节点的右子节点指针,其表示方式和第三行类似。各个数据之间用空格隔开。如对于以下两棵二叉树:




则data.txt的内容为:
11
A B C D E F G H I J K
1 3 -1 6 -1 8 -1 10 -1 -1 -1
2 4 5 7 -1 9 -1 -1 -1 -1 -1
8
B D E A H F I M
1 3 -1 -1 -1 6 -1 -1
2 4 5 -1 -1 7 -1 -1

例如树2中节点E来说,它没有左节点,所以第三行中对应位置为-1;它的右节点为F(编号为5)。而对节点F来说,它的左节点为I(编号6),右节点为M(编号7)。

程序输出到屏幕上,第一行为找到的最大子树的个数,从第二行开始为每个最大子树的各节点内容(按照字母顺序A,B,C,D……排列)。
例如,对于树1树2,输出结果为:
2
B D E H
F I M

...全文
54 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

65,202

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧