TreeNode findLCA(TreeNode root, TreeNode p, TreeNode q) {
// no root no LCA.
if(!root) {
return NULL;
}
// if either p or q is the root then root is LCA.
if(root==p || root==q) {
return root;
} else {
// get LCA of p and q in left subtree.
TreeNode l=findLCA(root->left , p , q);
// get LCA of p and q in right subtree.
TreeNode r=findLCA(root->right , p, q);
// if one of p or q is in leftsubtree and other is in right
// then root it the LCA.
if(l && r) {
return root;
}
// else if l is not null, l is LCA.
else if(l) {
return l;
} else {
return r;
}
}
}这个面试太常出现了,所以更新下。最主要用buttom up效率高,O(n), 思路其实类似isBalanced Binary Tree.
本文介绍了一种在二叉树中寻找两个节点最近公共祖先(LCA)的高效算法。采用递归自底向上的方式遍历二叉树,时间复杂度为O(n)。文章详细解释了算法的工作原理并提供了实现代码。
332

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



