LeetCode Lowest Common Ancestor of a Binary Search Tree (LCA最近公共祖先)

 

题意:给一棵二叉排序树,找p和q的LCA。

思路:给的是排序树,那么每个节点必定,大于左子树中的最大,小于右子树种的最小。根据这个特性,找LCA就简单多了。

三种情况:

(1)p和q都在root左边,那么往root左子树递归。

(2)在右同理。

(3)一左一右的,那么root->val肯定大于其中的1个,小于另一个。

 

 1 /**

 2  * Definition for a binary tree node.

 3  * struct TreeNode {

 4  *     int val;

 5  *     TreeNode *left;

 6  *     TreeNode *right;

 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}

 8  * };

 9  */

10 class Solution {

11 public:

12     TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {  //这是一棵排序树啊!

13         if( (root->val - p->val ) * (root->val - q->val) <=0  )    //一大一小必会产生负的,或者root为其中1个,那么就是0

14             return root;

15         if( max(p->val, q->val) < root->val )              //都在左边

16             return lowestCommonAncestor(root->left, p, q);

17         else            //都在右边

18             return lowestCommonAncestor(root->right, p, q);

19     }

20 };
AC代码

 

你可能感兴趣的:(Binary search)