【LeetCode 44】235.二叉搜索树的最近公共祖先

简介: 【LeetCode 44】235.二叉搜索树的最近公共祖先

一、题意

二、解答过程

《二叉树的最近公共祖先》不同,普通二叉树求最近公共祖先需要利用回溯自底向上查找公共节点,而二叉搜索树就不用了,因为二叉搜索树是有序的(相当于自带方向),只要自上而下遍历二叉搜索树即可。

可以采用前序遍历(中-左-右)。

遍历二叉搜索树的过程就是:需找区间[p->val,q->val];如果cur节点在[p->val,q->val]或者 [q->val,p->val]区间,那么 cur就是最近公共祖先,直接返回 cur

  • 6在0和3的同侧,需要继续左遍历
  • 2在0和3的中间,那么2就是最近公共祖先
class Solution {
public:
    //1.
    TreeNode* traversal(TreeNode *cur,TreeNode *p,TreeNode *q)
    {   //2.
        if(cur==NULL) return cur;
        //3.
        if(cur->val>p->val&&cur->val>q->val)//不断向左遍历左子树
        {//p和q在当前节点同侧,需要继续遍历
            TreeNode* left=traversal(cur->left,p,q);
            if(left!=NULL)
            {
                return left;
            }
        }
        if(cur->val<p->val&&cur->val<q->val)//不断向右遍历右子树
        {//p和q在当前节点同侧,需要继续遍历
            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);
    }
};


目录
相关文章
|
9月前
|
Go 开发者 索引
【LeetCode 热题100】路径与祖先:二叉树中的深度追踪技巧(力扣33 / 81/ 153/154)(Go语言版)
本文深入探讨了LeetCode中四道关于「搜索旋转排序数组」的经典题目,涵盖了无重复和有重复元素的情况。通过二分查找的变形应用,文章详细解析了每道题的解题思路和Go语言实现代码。关键点包括判断有序区间、处理重复元素以及如何缩小搜索范围。文章还总结了各题的异同,并推荐了类似题目,帮助读者全面掌握二分查找在旋转数组中的应用。无论是初学者还是有经验的开发者,都能从中获得实用的解题技巧和代码实现方法。
377 14
|
10月前
|
Go
【LeetCode 热题100】路径与祖先:二叉树中的深度追踪技巧(力扣437 / 236 )(Go语言版)
本文深入探讨二叉树中路径与祖先问题,涵盖两道经典题目:LeetCode 437(路径总和 III)和236(最近公共祖先)。对于路径总和 III,文章分析了双递归暴力解法与前缀和优化方法,后者通过哈希表记录路径和,将时间复杂度从O(n²)降至O(n)。在最近公共祖先问题中,采用后序遍历递归查找,利用“自底向上”的思路确定最近公共祖先节点。文中详细解析代码实现与核心要点,帮助读者掌握深度追踪技巧,理解树结构中路径与节点关系的本质。这类问题在面试中高频出现,掌握其解法意义重大。
243 4
【LeetCode 45】701.二叉搜索树中的插入操作
【LeetCode 45】701.二叉搜索树中的插入操作
123 1
【LeetCode 48】108.将有序数组转换为二叉搜索树
【LeetCode 48】108.将有序数组转换为二叉搜索树
145 0
【LeetCode 47】669.修剪二叉搜索树
【LeetCode 47】669.修剪二叉搜索树
93 0
【LeetCode 46】450.删除二叉搜索树的节点
【LeetCode 46】450.删除二叉搜索树的节点
182 0
【LeetCode 43】236.二叉树的最近公共祖先
【LeetCode 43】236.二叉树的最近公共祖先
154 0
【LeetCode 42】501.二叉搜索树中的众数
【LeetCode 42】501.二叉搜索树中的众数
125 0
【LeetCode 41】530.二叉搜索树的最小绝对差
【LeetCode 41】530.二叉搜索树的最小绝对差
127 0
【LeetCode 40】98.验证二叉搜索树
【LeetCode 40】98.验证二叉搜索树
113 0

热门文章

最新文章