当前位置:网站首页>Leetcode 235. 二叉搜索树的最近公共祖先

Leetcode 235. 二叉搜索树的最近公共祖先

2022-08-09 22:05:00 LuZhouShiLi

Leetcode 235. 二叉搜索树的最近公共祖先

题目

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

思路

  • 确定递归函数返回值以及参数:参数就是当前节点,以及两个节点p,q
  • 终止条件,遇到空值 直接返回即可
  • 遍历二叉搜索树的时候就是寻找区间[p->val,q->val] 如果p->val > cur->val, 同时q->val > cur->val,那么遍历右子树,反之遍历左子树。

代码

/** * 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* traversal(TreeNode* cur,TreeNode *p,TreeNode *q)
    {
    
        if(cur == NULL)
        {
    
            return cur;
        }

        if(cur->val > p->val && cur->val > q->val)
        {
    
            // 递归左子树
            TreeNode* left = traversal(cur->left,p,q);
            if(left != NULL)
            {
    
                return left;
            }
        }

        if(cur->val < p->val && cur->val < q->val)
        {
    
            // 递归右子树
            TreeNode* right = traversal(cur->right,p,q);
            if(right != NULL)
            {
    
                return right;
            }
        }

        return cur;

    }

    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
    
        return traversal(root,p,q);
    }
};

原网站

版权声明
本文为[LuZhouShiLi]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_44653420/article/details/126244668