C++第二阶段——数据结构和算法,之前学过一点点数据结构,当时是基于Python来学习的,现在基于C++查漏补缺,尤其是树的部分。这一部分计划一个月,主要利用代码随想录来学习,刷题使用力扣网站,不定时更新,欢迎关注!
文章目录
- 一、236. 二叉树的最近公共祖先
- 二、235. 二叉搜索树的最近公共祖先
一、236. 二叉树的最近公共祖先
/*** 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* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {// 判断一个节点左子树右子树是否同时包含pq即可if(root==p||root==q||root==NULL) 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;}};
二、235. 二叉搜索树的最近公共祖先
class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {// 判断一个节点左子树右子树是否同时包含pq即可if(root==p||root==q||root==NULL) 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;}};