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 nodes[i] are unique

All nodes[i] 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;
    }
};
相关推荐
我搞slam2 小时前
快乐数--leetcode
算法·leetcode·哈希算法
WWZZ20253 小时前
快速上手大模型:机器学习3(多元线性回归及梯度、向量化、正规方程)
人工智能·算法·机器学习·机器人·slam·具身感知
东方佑4 小时前
从字符串中提取重复子串的Python算法解析
windows·python·算法
西阳未落4 小时前
LeetCode——二分(进阶)
算法·leetcode·职场和发展
通信小呆呆4 小时前
以矩阵视角统一理解:外积、Kronecker 积与 Khatri–Rao 积(含MATLAB可视化)
线性代数·算法·matlab·矩阵·信号处理
Dfreedom.4 小时前
一文掌握Python四大核心数据结构:变量、结构体、类与枚举
开发语言·数据结构·python·变量·数据类型
CoderCodingNo5 小时前
【GESP】C++四级真题 luogu-B4068 [GESP202412 四级] Recamán
开发语言·c++·算法
一个不知名程序员www5 小时前
算法学习入门---双指针(C++)
c++·算法
Shilong Wang6 小时前
MLE, MAP, Full Bayes
人工智能·算法·机器学习
Theodore_10226 小时前
机器学习(6)特征工程与多项式回归
深度学习·算法·机器学习·数据分析·多项式回归