/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
private TreeNode ans;
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
dfs(root,p,q);
return ans;
}
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 rson || lson || root.val == p.val || root.val == q.val;
}
}
后序遍历,找到的第一个root一定是最近公共祖先。
二叉树中最近公共祖先的寻找算法
这篇博客介绍了如何使用后序遍历在二叉树中寻找两个节点的最近公共祖先。提供的Java解决方案中,`lowestCommonAncestor`方法通过递归的`dfs`函数实现,当找到第一个同时为左右子树或与目标节点值相等的节点时,确定该节点即为最近公共祖先。
216

被折叠的 条评论
为什么被折叠?



