博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Lowest Common Ancestor of a Binary Search Tree 二叉搜索树的最小共同父节点
阅读量:7060 次
发布时间:2019-06-28

本文共 1752 字,大约阅读时间需要 5 分钟。

Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.

According to the : “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”

_______6______       /              \    ___2__          ___8__   /      \        /      \   0      _4       7       9         /  \         3   5

For example, the lowest common ancestor (LCA) of nodes 2 and 8 is 6. Another example is LCA of nodes 2 and 4 is 2, since a node can be a descendant of itself according to the LCA definition.

这道题让我们求二叉搜索树的最小共同父节点, LeetCode中关于BST的题有, , , , , ,  和 。这道题我们可以用递归来求解,我们首先来看题目中给的例子,由于二叉搜索树的特点是左<根<右,所以根节点的值一直都是中间值,大于左子树的所有节点值,小于右子树的所有节点值,那么我们可以做如下的判断,如果根节点的值大于p和q之间的较大值,说明p和q都在左子树中,那么此时我们就进入根节点的左子节点继续递归,如果根节点小于p和q之间的较小值,说明p和q都在右子树中,那么此时我们就进入根节点的右子节点继续递归,如果都不是,则说明当前根节点就是最小共同父节点,直接返回即可,参见代码如下:

解法一:

class Solution {public:    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {        if (!root) return NULL;        if (root->val > max(p->val, q->val))             return lowestCommonAncestor(root->left, p, q);        else if (root->val < min(p->val, q->val))             return lowestCommonAncestor(root->right, p, q);        else return root;    }};

当然,此题也有非递归的写法,用个while循环来代替递归调用即可,然后不停的更新当前的根节点,也能实现同样的效果,代码如下:

解法二:

class Solution {public:    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {        while (true) {            if (root->val > max(p->val, q->val)) root = root->left;            else if (root->val < min(p->val, q->val)) root = root->right;            else break;        }              return root;    }};

本文转自博客园Grandyang的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
阿里云域名解析+网站备案
查看>>
字符串拼接代码规范 转需
查看>>
ABP官方文档翻译 5.3 OData集成
查看>>
13.特殊IP的区别
查看>>
斜杠与反斜杠的记法
查看>>
利用IDEA构建springboot应用
查看>>
JAVA高级--异常处理概念和异常处理机制
查看>>
AngularJS code converage
查看>>
【ASP.NET Process Model 笔记 二】ASP.NET Http Runtime Pipeline
查看>>
c# 抓取 js动态生成的HTML的工具:NHtmlUnit‎
查看>>
1849: Cool number
查看>>
【小知识】为什么负数除二和右移一位的结果不一样?
查看>>
ecshop调用指定分类(包含子分类)下所有产品的评论信息
查看>>
树莓派板子中的灯光的信息
查看>>
前端常见的设计模式
查看>>
Java基础——数组Array
查看>>
053(四十五)
查看>>
自问自答-hadoop自带哪些案例(0.20.2)
查看>>
tachyon 集群安装
查看>>
JS控制元素可见(显示)与不可见(隐藏)
查看>>