寻找所有最大子树...
给定两棵二叉树,求出它们所有节点数大于等于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