C语言重构【235】二叉搜索树的最近公共祖先

it2024-10-28  8

文章目录

所有题目源代码:[Git地址](https://github.com/ch98road/leetcode)题目方案:复杂度计算

所有题目源代码:Git地址

题目

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]

示例 1: 输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8 输出: 6 解释: 节点 2 和节点 8 的最近公共祖先是 6。 示例 2: 输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4 输出: 2 解释: 节点 2 和节点 4 的最近公共祖先是 2, 因为根据定义最近公共祖先节点可以为节点本身。 说明: 所有节点的值都是唯一的。 p、q 为不同节点且均存在于给定的二叉搜索树中。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-search-tree 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方案:

/** * 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的val,然后递归比较,找到最深且值在二者中间的数(可以等于) int pd=p->val,qd=q->val; return CommonAncestor(root,min(pd,qd),max(pd,qd)); } TreeNode* CommonAncestor(TreeNode* root,int small,int big){ int dat = root->val; if(dat>big){ //如果在比大数大,则说明在左侧 return CommonAncestor(root->left,small,big); }else if(dat<small){ //如果在比小数小,则说明在右侧 return CommonAncestor(root->right,small,big); } return root; } };
复杂度计算
时间复杂度:O(n)空间复杂度:O(1)
最新回复(0)