1. 程式人生 > >3.19 Tarjan演算法與並查集解決二叉樹節點間最近公共祖先的批量查詢問題

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)

 

題目來源:左程雲老師《程式設計師程式碼面試指南》