题目:
分析:
感觉还是有一定难度的。
以下代码用来判断已经找到两个点了:
只要找到一个点就会返回true。
写的挺好的,强!
if((b1&&b2||b1&&b3||b2&&b3))
{
ans=root;
}
这个是核心,其他的都ok吧!
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* ans;
bool f(TreeNode* root, TreeNode* p, TreeNode* q)
{
if(root==NULL) return 0;
bool b1=f(root->left,p,q);
bool b2=f(root->right,p,q);
bool b3=(root==p || root==q);
if((b1&&b2||b1&&b3||b2&&b3))
{
ans=root;
}
return b1||b2||b3;
}
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
f(root,p,q);
return ans;
}
};