【发布时间】:2017-07-08 17:59:06
【问题描述】:
我正在尝试在树中找到两个给定值的最低共同祖先。
我的方法是遍历树的左下角并检查各个节点是否有两个节点在它们下面。第一个给出匹配的节点是最低的共同祖先。
谁能告诉我这个函数的错误。
/*
Node is defined as
typedef struct node
{
int data;
node * left;
node * right;
}node;
*/
bool find(node *root,int val) //to check if the value exist under the given node or not
{
if(root==NULL)
return false;
if(root->data==val)
return true;
if((root->left&&find(root->left,val))||(root->right&&find(root->right,val)))
return true;
return false;
}
node * lca(node * root, int v1,int v2) //to find the lowest common ancestor
{
if(root==NULL)
return NULL;
static node* ans=NULL;
lca(root->left,v1,v2); //traversing to the bottom of the tree
lca(root->right,v1,v2);
if((find(root->left,v1)&&find(root->right,v2))||(find(root->left,v2)&&find(root->right,v1))) //checking the existence of both nodes under the tree
{
if(ans==NULL)
ans=root;
}
return ans; //returning the lca
}
【问题讨论】:
-
运行代码时会发生什么?与预期结果有何不同?
标签: c++ data-structures tree