2道最近公共祖先的题目
1.第一道
题目链接:https://leetcode.cn/problems/er-cha-sou-suo-shu-de-zui-jin-gong-gong-zu-xian-lcof
https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/
寻找分叉节点
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root == p || root==q){
return root;
}
if ((root.val>p.val && root.val<q.val)||(root.val<p.val && root.val>q.val)) return root;
return root.val > p.val?lowestCommonAncestor(root.left,p,q):lowestCommonAncestor(root.right,p,q);
}
}
2.第二道
题目链接:https://leetcode.cn/problems/er-cha-shu-de-zui-jin-gong-gong-zu-xian-lcof/
https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/
我的思路是分别寻找p,q的路线,然后进行判断
class Solution {
List<TreeNode> p_node ;
List<TreeNode> q_node ;
List<TreeNode> node_record = new ArrayList<>();
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
search(root,p,q);
int i = 0;
while (i< p_node.size()-1 && i< q_node.size()-1 && (q_node.get(i+1)==p_node.get(i+1))){
i++;
}
return p_node.get(i);
}
private void search(TreeNode node, TreeNode p, TreeNode q){
if (p_node!=null && q_node!=null){
return;
}
node_record.add(node);
if (node==p){
p_node = new ArrayList<>(node_record);
}
if(node==q){
q_node = new ArrayList<>(node_record);
}
if (node.left!=null) search(node.left,p,q);
if (node.right!=null) search(node.right,p,q);
node_record.remove(node);
}
}
题解给出了另一种做法:利用递归寻找分界
class Solution {
private TreeNode ans;
public Solution() {
this.ans = null;
}
private boolean dfs(TreeNode root, TreeNode p, TreeNode q) {
if (root == null) return false;
boolean lson = dfs(root.left, p, q);
boolean rson = dfs(root.right, p, q);
if ((lson && rson) || ((root.val == p.val || root.val == q.val) && (lson || rson))) {
ans = root;
}
return lson || rson || (root.val == p.val || root.val == q.val);
}
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
this.dfs(root, p, q);
return this.ans;
}
}
//链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/solutions/238552/er-cha-shu-de-zui-jin-gong-gong-zu-xian-by-leetc-2/