struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) :val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if (root == NULL)return root;
if (root == q || root == p)return root;
TreeNode* left = lowestCommonAncestor(root->left, p, q);
TreeNode* right = lowestCommonAncestor(root->right, p, q);
if (left != NULL && right != NULL)return root;
else if (left != NULL && right == NULL)return left;
else if (left == NULL && right != NULL)return right;
else {
return NULL;
}
}
};
int main() {
TreeNode* a = new TreeNode(3);
TreeNode* b = new TreeNode(5);
TreeNode* c = new TreeNode(1);
TreeNode* d = new TreeNode(6);
TreeNode* e = new TreeNode(2);
TreeNode* f = new TreeNode(0);
TreeNode* g = new TreeNode(8);
TreeNode* h = new TreeNode(7);
TreeNode* i = new TreeNode(4);
a->left = b;
a->right = c;
b->left = d;
b->right = e;
c->left = f;
c->right = g;
e->left = h;
e->right = i;
TreeNode* p = b;
TreeNode* q = c;
Solution ss;
TreeNode* root = ss.lowestCommonAncestor(a, p, q);
cout << root->val << endl;
return 0;
}
236. 二叉树的最近公共祖先
最新推荐文章于 2025-06-05 13:58:01 发布