3.19 Tarjan算法与并查集解决二叉树节点间最近公共祖先的批量查询问题

Posted latup

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.19 Tarjan算法与并查集解决二叉树节点间最近公共祖先的批量查询问题相关的知识,希望对你有一定的参考价值。

题目】:

  如下的Node类是标准的二叉树节点结构:

1 public class Node{
2         public int value;
3         public Node left;
4         public Node right;
5 
6         public Node(int data){
7                 this.value = data;
8         }
9 }

  再定义Query类如下:

1 public class Query{
2         public Node o1;
3         public Node o2;
4 
5         public Query(Node o1, Node o2){
6                 this.o1 = o1;
7                 this.o2 = o2;
8         }
9 }

  一个Query类的实例表示一条查询语句,表示想要查询o1节点和o2节点的最近公共祖先节点

  给定一棵二叉树的头节点head,并给定所有的查询语句,即一个Query类型的数组Query[] ques,请返回Node类型的数组Node[] ans,ans[i]代表ques[i]这条查询的答案,即ques[i].o1和ques[i].o2的最近公共祖先

 

要求】:

  如果二叉树的节点数为N,查询语句的条数为M,整个处理过程的时间复杂度要求达到O(N+M)

 

题目来源:左程云老师《程序员代码面试指南》

以上是关于3.19 Tarjan算法与并查集解决二叉树节点间最近公共祖先的批量查询问题的主要内容,如果未能解决你的问题,请参考以下文章

大力飞砖之DFS与并查集(中-下)

「学习笔记」tarjan求最近公共祖先

LCA算法解析-Tarjan&倍增

并查集

wenbao与并查集

luogu3379 模板最近公共祖先(LCA) Tarjan