- 算法思路:若两个结点有一个为根结点,那么根结点就是其最近公共祖先;否则的话分别在左右子树中去找这两个结点的公共祖先,会出现4种情况:
1 .在左右子树中都找到了
2 .在左子树中找到了
3 .在右子树中找到了
4 .在左右子树中都没找到
TreeNode *ComAncestor(TreeNode *root, TreeNode *p, TreeNode *q){
if (root == NULL)
return NULL;
if (p == root || q == root)
return root;
TreeNode *leftNode = ComAncestor(root->left, p, q);
TreeNode *rightNode = ComAncestor(root->right, p, q);
if (leftNode != NULL && rightNode != NULL)
return root;
else if (leftNode != NULL)
return leftNode;
else if (rightNode != NULL)
return rightNode;
else
return NULL;
}