leetcode 二叉搜索树的最近公共祖先(非二叉搜索树也适用) 简单
做题的时候忽略了是二叉搜索树,就直接做的。最后的效率也不低:时间超过 91.82%,空间超过 72.45%
(二叉搜索树的话更简单,这里放上对普通二叉树也适用的代码)
辅助函数返回值 pair<bool, TreeNode*>,当 pair.first 为真时,表示找到了最近公共祖先,存放于 pair.second,递归直接返回即可。
否则,就直接判断 pair.second 是否为 null,如果不为 null 就表示找到了 p, q 中的某一个。
class Solution { public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { return _lowestCommonAncestor(root, p, q).second; } pair<bool, TreeNode*> _lowestCommonAncestor(TreeNode *root, TreeNode *p, TreeNode *q) { if(root == nullptr || root == p || root == q) return {false, root}; auto lef = _lowestCommonAncestor(root -> left, p, q); auto rig = _lowestCommonAncestor(root -> right, p, q); if(lef.first || rig.first) { return lef.first ? lef : rig; } if(lef.second == p && rig.second == q || lef.second == q && rig.second == p) // 好像可以写成 if(lef.second && rig.second) return {true, root}; return lef.second ? lef : rig; } };