• LeetCode236. Lowest Common Ancestor of a Binary Tree


    一、题目

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

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

    Example 1:

    Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
    Output: 3
    Explanation: The LCA of nodes 5 and 1 is 3.
    Example 2:

    Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
    Output: 5
    Explanation: The LCA of nodes 5 and 4 is 5, since a node can be a descendant of itself according to the LCA definition.
    Example 3:

    Input: root = [1,2], p = 1, q = 2
    Output: 1

    Constraints:

    The number of nodes in the tree is in the range [2, 105].
    -109 <= Node.val <= 109
    All Node.val are unique.
    p != q
    p and q will exist in the tree.

    二、题解

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
            if(!root) return NULL;
            if(root->val == p->val || root->val == q->val) return root;
            TreeNode* left = lowestCommonAncestor(root->left,p,q);
            TreeNode* right = lowestCommonAncestor(root->right,p,q);
            if(left != NULL && right != NULL) return root;
            else if(left == NULL && right != NULL) return right;
            else if(left != NULL && right == NULL) return left;
            else return NULL;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  • 相关阅读:
    FinClip 自有账户体系是怎么做的?
    Linux_C_入门篇学习笔记
    【Java】List
    互斥量保护资源
    华为OD机试 - 等和子数组最小和 - 深度优先搜索(Java 2022 Q4 100分)
    openssl创建CA证书教程
    分布式通过tcp控制开关
    在 Visual Studio Code (VS Code) 中设置
    VL170为Mux切换信号性能支持USB 3.1
    华为开源自研AI框架昇思MindSpore应用案例:梯度累加
  • 原文地址:https://blog.csdn.net/weixin_46841376/article/details/134475471