leetcode
题目描述
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.
According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”
(where we allow a node to be a descendant of itself).”
_______3______
/ \
___5___ ___1___
/ \ / \
6 _2_ 0 8
/ \
7 4
For example, the lowest common ancestor (LCA) of nodes 5 and 1 is 3. Another example is LCA of nodes 5 and 4 is 5, since a node can be a descendant of itself according to the LCA definition.
解题思路
如果找到该节点,则返回1,没有找到返回0,找到左边+右边=2的第一个点。因为其他公共子节点可能是左子树或者右子树为2,另一个子树为0。所以必须排除这种情况。我的出错地方在于应该判断两个节点相同,而不是判断两个节点的值相同。
代码
TreeNode* lowestCommonAncestor(TreeNode* root,TreeNode* p, TreeNode* q)
{
if(!root) return nullptr;
TreeNode* ans = nullptr;
int count = 0;
CommonAncestor(root, p, q, ans, count);
return ans;
}
void CommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q, TreeNode*& ans, int& count)
{
if(!root) return;
int lCount = 0, rCount = 0, curCount = 0;
if(root == p || root == q) curCount = 1;
CommonAncestor(root->left, p, q, ans, lCount);
CommonAncestor(root->right, p, q, ans, rCount);
count = curCount + lCount + rCount;
if(lCount < 2 && rCount < 2 && count == 2)
{
ans = root;
return;
}
}