3.19 Tarjan演算法與並查集解決二叉樹節點間最近公共祖先的批量查詢問題
阿新 • • 發佈:2019-01-01
【題目】:
如下的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; 3public 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)
題目來源:左程雲老師《程式設計師程式碼面試指南》