【剑指offer】面试题68 - I. 二叉搜索树的最近公共祖先

解题思路

采用后序遍历对树进行遍历;
对于BST树,由于其具有左子树小于根节点,右子树大于根节点,因此如果当前节点小于p和q,则向右子树找,如果当前节点大于p,q,则向左子树找

代码

class Solution {
     
public:
	TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
     
		if(root==NULL||p==NULL||q==NULL) return NULL;//rooot,p,q一者为空
        //如果当前节点小于p和q,则向右子树找
		if (root->val < q->val && root->val < p->val) return lowestCommonAncestor(root->right, p, q);
        //当前节点大于p,q,则向左子树找
		if (root->val > q->val&& root->val > p->val) return lowestCommonAncestor(root->left, p, q);
		//如果位于之前,则返回根节点
		return root;
	}
};

你可能感兴趣的:(【魂】算法,二叉树,c++,递归法,剑指offer)