本文主要是介绍LeetCode - 235. 二叉搜索树的最近公共祖先,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
描述
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 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/
求解
class Solution {public:// 递归解法TreeNode *lowestCommonAncestor_recur(TreeNode *root, TreeNode *p, TreeNode *q) {if (root == nullptr) {return nullptr;}if (p->val < root->val && (q->val < root->val)) {return lowestCommonAncestor_recur(root->left, p, q);}if ((p->val > root->val) && (q->val > root->val)) {return lowestCommonAncestor_recur(root->right, p, q);}return root;}// 迭代解法TreeNode *lowestCommonAncestor(TreeNode *root, TreeNode *p, TreeNode *q) {if (root == nullptr) {return nullptr;}std::queue<TreeNode *> record;record.push(root);while(!record.empty()) {auto node = record.front();record.pop();if (p->val < node->val && (q->val < node->val)) {if(node->left) {record.push(node->left);}continue;}if ((p->val > node->val) && (q->val > node->val)) {if(node->right) {record.push(node->right);}continue;}return node;}return nullptr;}};
这篇关于LeetCode - 235. 二叉搜索树的最近公共祖先的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!