设计C++算法判断结点E是否为结点E1和E2的共同祖先。
时间: 2024-06-13 21:08:11 浏览: 225
以下是C++算法判断结点E是否为结点E1和E2的共同祖先的实现:
```cpp
// 定义二叉树结点
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
// 判断结点E是否为结点E1和E2的同祖先
bool isAncestor(TreeNode* root, TreeNode* E1, TreeNode* E2, TreeNode* E) {
if (root == nullptr) {
return false;
}
if (root == E1 || root == E2) {
return true;
}
bool left = isAncestor(root->left, E1, E2, E);
bool right = isAncestor(root->right, E1, E2, E);
if ((left && right) || ((left || right) && (root == E))) {
return true;
}
if (root == E1 || root == E2 || root == E) {
return true;
}
return left || right;
}
```
阅读全文