最近公共祖先LA、打印螺旋矩阵.docVIP

  • 10
  • 0
  • 约1.88万字
  • 约 31页
  • 2016-10-12 发布于贵州
  • 举报
最近公共祖先LA、打印螺旋矩阵

最近公共祖先LCA、打印螺旋矩阵?解答这个问题之前,咱们得先搞清楚到底什么是最近公共祖先。最近公共祖先简称LCA,所谓LCA,是当给定一个有根树T时,对于任意两个结点u、v,找到一个离根最远的结点x,使得x同时是u和v的祖先,x 便是u、v的最近公共祖先。 ? ? 举个例子,如针对下图所示的一棵普通的二叉树来讲: ? ? 结点3和结点4的最近公共祖先是结点2,即LCA(3 4)=2 。在此,需要注意到当两个结点在同一棵子树上的情况,如结点3和结点2的最近公共祖先为2,即 LCA(3 2)=2。同理:LCA(5 6)=4,LCA(6 10)=1。 ? ? 明确了题意,咱们便来试着解决这个问题。一般文章的做法,可能是针对是否为二叉查找树分情况讨论,想必这也是一般人最先想到的思路。除此之外,还有所谓的Tarjan算法、倍增算法、以及转换为RMQ问题(求某段区间的极值)。 ? ? 下面,便来一一具体阐述这几种方法。 解法一、暴力对待 1.1、是二叉查找树 ? ? 在当这棵树是二叉查找树的情况下,如下图: ? ? 那么从树根开始: 如果当前结点t 大于结点u、v,说明u、v都在t 的左侧,所以它们的共同祖先必定在t 的左子树中,故从t 的左子树中继续查找; 如果当前结点t 小于结点u、v,说明u、v都在t 的右侧,所以它们的共同祖先必定在t 的右子树中,故从t 的右子树中继续查找;

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档