题意:给一棵二叉排序树,找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代码
时间: 2024-10-16 20:50:00