Lintcode 3715 · Lowest Common Ancestor V (最小祖先好题)

3715 · Lowest Common Ancestor VPRE

Algorithms

Medium

This topic is a pre-release topic. If you encounter any problems, please contact us via "Problem Correction", and we will upgrade your account to VIP as a thank you.

Description

Given a binary tree with a root node root and an array nodes of objects of class TreeNode, you need to find the Lowest Common Ancestor (LCA, Lowest Common Ancestor) of all nodes in nodes and return it.

Where all the nodes in nodes exist in that binary tree and all the nodes in the binary tree have different values from each other.

Only $39.9 for the "Twitter Comment System Project Practice" within a limited time of 7 days!

WeChat Notes Twitter for more information(WeChat ID jiuzhang15)

The number of nodes in the tree is in the range

1 , 1 0 4

[1,10

4

]

1

0

9

.

1

0

9

−10

9

≤TreeNode.val≤10

9

All TreeNode.val are unique

All nodesi are unique

All nodesi exist in the tree

Example

Example 1

Input

root = {3,5,1,6,2,0,8,#,#,7,4}

nodes = 4,7

Output

2

Explanation

The lowest common ancestor of TreeNode(4) and TreeNode(7) is TreeNode(2)

Example 2

Input

root = {3,5,1,6,2,0,8,#,#,7,4}

nodes = 2

Output

2

Explanation

The lowest common ancestor of a single node is the node itself

Example 3

Input

root = {3,5,1,6,2,0,8,#,#,7,4}

nodes = 7,2,6,4

Output

5

Explanation

The lowest common ancestor of TreeNode(7)、TreeNode(2)、TreeNode(6) and TreeNode(4) is TreeNode(5)

Example 4

Input

root = {3,5,1,6,2,0,8,#,#,7,4}

nodes = 0,2,3,1,5,8,6,4,7

Output

3

Explanation

nodes contains all the nodes in the tree, and the lowest common ancestor of all the nodes in the tree is the root node

Tags

Related Problems

474

Lowest Common Ancestor II

Easy

578

Lowest Common Ancestor III

Medium

3715

Lowest Common Ancestor V

Medium

解法1:套用的labuladong的模板。

cpp 复制代码
/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */

class Solution {
public:
    /**
     * @param root: The root node of a binary tree.
     * @param nodes: An array of objects of class TreeNode.
     * @return: The lowest common ancestor of nodes.
     */
    TreeNode* lowestCommonAncestor(TreeNode *root, vector<TreeNode*> &nodes) {
        if (!root) return NULL;
        unordered_set<TreeNode *> nodeSet;
        for (auto pNode : nodes) nodeSet.insert(pNode);
        TreeNode *res = helper(root, nodeSet);
        return res;
    }
private:
    TreeNode* helper(TreeNode *root, unordered_set<TreeNode *> &nodeSet) {
        if (!root) return NULL;
        if (nodeSet.find(root) != nodeSet.end()) return root;
        TreeNode *left = NULL, *right = NULL;
        
        left = helper(root->left, nodeSet);
        right = helper(root->right, nodeSet);
        
        if (left && right) return root;
        return left ? left : right;
    }
};
相关推荐
weixin_307779133 分钟前
智能模拟数据生成平台:生成式AI合成数据技术重塑开发测试效能
人工智能·测试工具·算法·测试用例
Darling噜啦啦7 分钟前
JavaScript 数组深度解析:从纯函数到二维数组陷阱,一文吃透前端数据结构核心
前端·javascript·数据结构
羊羊小栈1 小时前
Uplift营销供应链协同决策系统(基于Uplift因果推断与运筹优化算法)
前端·人工智能·算法·毕业设计·大作业
金融小师妹1 小时前
AI因子共振模型显示:金银比突破区间上沿,白银定价逻辑进入再校准阶段
人工智能·算法·均值算法·线性回归
不会就选b1 小时前
数据结构之链表OJ题(中)
数据结构·链表
J2虾虾2 小时前
C语言 typedef 用法
c语言·数据结构·算法
hunterkkk(c++)2 小时前
线段树例题
算法
故渊at2 小时前
第二板块:Android 四大组件标准化学理 | 第七篇:Activity 页面载体与任务栈算法
android·算法·生命周期·activity·任务栈
兰令水2 小时前
leecodecode【区间DP+树形DP】【2026.6.10打卡-java版本】
java·算法·leetcode