题目:求二叉树两节点的最低共同父节点
代码;
//求node节点是否在head树中
bool findNode(Tree* head,Tree* node)
{
if(head==null||node==null)
return false;
if(head==node)
return true;
if(!head->left)
findNode(head->left,node);
else
findNode(head->right,node);
return false;
}
Tree* findLastFather(Tree* head,Tree* node1,Tree* node2)
{
if(head==null||node1==null||node2==null)
return null;
bool leftnode1=false;
bool leftnode2=false;
if(head->left!=null)
{
leftnode1=findNode(head->left,node1);
leftnode2=findNode(head->left,node2);
}
if(leftnode1&&leftnode2)
{
if(head->left==node1||head->left==node2)
return head;
findLastFather(head->left,node1,node2);
}
bool rightnode1=false;
bool rightnode2=false;
if(head->right!=null)
{
if(!leftnode1)
rightnode1=findNode(head->right,node1);
if(!leftnode2)
rightnode2=findNode(head->right,node2);
}
if(rightnode1&&rightnode2)
{
if(head->right==node1||head->right==node2)
return head;
findLastFather(head->right,node1,node2);
}
if((leftnode1&&rightnode2)||(leftnode2&&rightnode1))
return head;
return null;
}