最近公共祖先问.pptVIP

  • 5
  • 0
  • 约小于1千字
  • 约 10页
  • 2019-01-24 发布于江苏
  • 举报
最近公共祖先问

最近公共祖先问题 罗汉忠 2008.4.21 问题描述与实验任务 问题描述:给定一棵树,设计一个算法对于给定的两个结点返回他们的最近公共祖先 实验任务:对于给定的树和树中的结点对,输出最近公共祖先 数据输入 有文件input .txt给出输入数据,第一行有一个正整数n,表示树有n个结点,标号为1,2,3,……,n,标号为1的是树根。接下来的n行,第i+1行描述与第i个结点相关联的子结点信息。其中,每行的第一个正整数k表示该节点的儿子数,其后的k个数,每一个数表示儿子结点的标号,当k=0时表示它是叶节点 文件的第n+2行是一个正整数m,表示要计算最近公共祖先的m个结点对。接下来的m行,每行有两个数,表示要计算最近公共祖先的结点标号 数据输出 将计算出来的m个节点队的最近公共祖先结点标号输出到output.txt ,每行三个数,前两个是结点标号,第三个是他们的最近公共祖先标号 输入数据样例 12 (n) 3 2 3 4 2 5 6 0 0 2 7 8 2 9 10 0 0 0 2 11 12 0 0 5 (m) 3 11 7 12 4 8 9 12 8 10 3 11 1 7 12 2 4 8 1 9 12 6 8 10 2 算法思想 在查询最近公共祖先时,实际上就是一次次的找节点的父亲,所以用父节点数组表示法来表示这棵树 实际做法,通过考察规律,可以发现如果把这两个结点的祖先用两个数组来存储,可以非常快的找打他的最近公共祖先 算法特点分析 只要把两个结点的祖先数组存储下来,然后最坏情况下只要O(N)时间,最好清空下只要O(1)就可以找到 这里都只是自己的算法思想,源程序我就不黏贴在这里了。呵呵 * * 1 2 3 4 5 6 7 8 9 10 11 12 0 1 2 5 7 1 2 3 4 5 6 7 8 9 10 11 12 7结点 10结点 0 1 2 6 10 *

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档