235. Lowest Common Ancestor of a Binary Search Tree

原题目:

235. Lowest Common Ancestor of a Binary Search Tree

读题:

本文题目是查找二叉搜索树的两个节点的最近公共祖先,有两个点

1)对象是二叉搜索树,左子树的节点均小于根节点,右子树的节点均大于根节点

2)公共祖先可能有很多个,取最近的那个

解题思路:

由于是二叉搜索树,用递归就比较简单了,如果p,q节点值均大于root节点值,那么必定在右子树,若均小于,则在左子树,若一大一小,则必然是root节点为最近公共祖先

class Solution 
{
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) 
    {
		int min = 0;
		int max = 0;
		if(NULL == root || NULL == p || NULL == q)
		{
			return NULL;
		}
		if(root == q || root == p)
		{
			return root;
		}
		min = (p->val > q->val)?q->val:p->val;
		max = (p->val > q->val)?p->val:q->val;
		if(max < root->val)
		{
			return lowestCommonAncestor(root->left,p,q);
		}
		if(min > root->val)
		{
			return lowestCommonAncestor(root->right,p,q);
		}
		return root;
    }
};

  

原文地址:https://www.cnblogs.com/xqn2017/p/8110804.html