LeetCode 235. Lowest Common Ancestor of a Binary Search Tree

来源:互联网 发布:中小学教师网络培训 编辑:程序博客网 时间:2024/05/16 15:46

题意:求一颗二叉搜索树的上两个节点的最小公共子序列

思路:我们根据BST的性质可知,对于一个节点p,如果存在左子树,那么它左子树上的点全都小于p,如果存在右子树,那么它右子树上的点都大于p。

因此根据这个性质,我们可以知道如果这两个节点的值都小于p,则他两个一定在p的左子树上,如果都大于p,则一定在其右子树上。

递归:

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

非递归:

class Solution{public:    TreeNode *lowestCommonAncestor(TreeNode *root, TreeNode *p, TreeNode *q){        while(1){            if(max(p->val, q->val) < root->val){                root = root->left;            }            else if(min(p->val, q->val) > root->val){                root = root->right;            }            else{                return root;            }        }    }};
0 0
原创粉丝点击