您的位置:首页 > 其它

Lowest Common Ancestor of a Binary Tree

2015-09-05 20:41 239 查看
class Solution {

public:

TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {

if (!root) return NULL;

if (root == p || root == q) return root;

TreeNode *L = lowestCommonAncestor(root->left, p, q);

TreeNode *R = lowestCommonAncestor(root->right, p, q);

if (L && R) return root; // if p and q are on both sides

return L ? L : R; // either one of p,q is on one side OR p,q is not in L&R subtrees

}

};

还是主要判断在两边还是在一边。

下面是自己的办法,超时了,先用find函数判断在哪边,在返回,其实多此一举。

class Solution {

public:

TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {

if(root==NULL) return root;

if(root==p||root==q) return root;

if((find(root->left,p)&&find(root->right,q))||(find(root->left,q)&&find(root->right,p))) return root;

if(find(root->left,p)&&find(root->left,q)) return lowestCommonAncestor(root->left,p,q);

if(find(root->right,p)&&find(root->right,q)) return lowestCommonAncestor(root->right,p,q);

}

bool find(TreeNode* root, TreeNode* p)

{

if(root==NULL) return false;

if(root==p) return true;

else return find(root->left,p)||find(root->right,p);

}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: