1、如果此二叉树为二叉搜索树,即树中所有结点的左子树的结点都比父结点小,所有结点的右子树都比父结点大
对于此种情况,我们只需从树的根结点开始和输入的两个结点进行比较。如果当前结点的值比两个结点的值都大,那么最低的共同父结点一定是在当前结点的左子树中,于是下一步遍历当前结点的左子结点;如果当前结点的值比两个结点的值都小,那么最低的共同父结点一定是在当前结点的右子树中,于是下一步遍历当前结点的右子结点。这样在树中从上到下找到第一个在输入结点的值之间的结点,就是最低的公共祖先。
struct BSNode
{
int _data;
BSNode* _left;
BSNode* _right;
BSNode(int data = 0) :_data(data), _left(NULL), _right(NULL)
{}
};
BSNode* GetLastCommonParent_1(BSNode* pRoot, BSNode* pNode1, BSNode* pNode2)
{
if (pRoot == NULL || pNode1 == NULL || pNode2 == NULL)
{
return NULL;
}
if (pNode1 == pNode2)
{
return pNode1;
}
BSNode* cur = pRoot;
while (true)
{
if ((cur->_data >= pNode1->_data&&cur->_data<=pNod