[LeetCode]235 二叉查找树的最近公共父亲节点

Lowest Common Ancestor of a Binary Search Tree(二叉查找树的最近公共父亲节点)

【难度:Easy】
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 v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”
《[LeetCode]235 二叉查找树的最近公共父亲节点》
For example, the lowest common ancestor (LCA) of nodes 2 and 8 is 6. Another example is LCA of nodes 2 and 4 is 2, since a node can be a descendant of itself according to the LCA definition.

给定一个二叉查找树和所要查找的两个节点,找到这两个节点的最近公共父亲节点。如图,节点2和8的LCA是6,节点2和4的LCA是2。

解题思路

根据LCA的定义和BST的特性,当root非空时可以区分为三种情况:1)两个节点均在root的左子树,此时对root->left递归求解;2)两个节点均在root的右子树,此时对root->right递归求解;3)两个节点分别位于root的左右子树,此时LCA为root。

c++代码如下:

/** * 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 == NULL)
            return root;

        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);
        }
        return root;
    }
};
    原文作者:二叉查找树
    原文地址: https://blog.csdn.net/qq_14821023/article/details/50761603
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞