zoukankan      html  css  js  c++  java
  • leetcode Lowest Common Ancestor of a Binary Tree

    1、binary search tree 

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

    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).”

    Given binary search tree:  root = [6,2,8,0,4,7,9,null,null,3,5]

    Example 1:

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

    Example 2:

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

    Note:

    • All of the nodes' values will be unique.
    • p and q are different and both values will exist in the BST.

    当树为二叉搜索树时,当所找两节点值都大于(都小于)当前节点值时,就在右子树(左子树)中递归查找;

    否则两个节点值分别大于、小于当前节点值或有一个等于当前节点值,当前节点即为公共祖先。

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

    2、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).”

    Given the following binary tree:  root = [3,5,1,6,2,0,8,null,null,7,4]

    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.
    

    Note:

    • All of the nodes' values will be unique.
    • p and q are different and both values will exist in the binary tree.

    当前节点为空或等于所找节点中的一个时,就返回当前节点;

    否则分别在左子树和右子树中查找,若左右返回节点均非空时,由于树中无重复元素,所以所找两个节点分别在左子树和右子树中找到,当前节点就是公共祖先,返回当前节点。

    class Solution {
    public:
        TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
            if (root == NULL || root == p || root == q)
                return root;
            auto l = lowestCommonAncestor(root->left, p, q);
            auto r = lowestCommonAncestor(root->right, p, q);
            if (l && r) return root;
            if (!l) return r;
            return l;
        }
    };
  • 相关阅读:
    LeetCode 88. Merge Sorted Array
    LeetCode 75. Sort Colors
    LeetCode 581. Shortest Unsorted Continuous Subarray
    LeetCode 20. Valid Parentheses
    LeetCode 53. Maximum Subarray
    LeetCode 461. Hamming Distance
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 976. Largest Perimeter Triangle
    LeetCode 1295. Find Numbers with Even Number of Digits
    如何自学并且系统学习计算机网络?(知乎问答)
  • 原文地址:https://www.cnblogs.com/lxc1910/p/10331014.html
Copyright © 2011-2022 走看看