您的位置:首页 > 其它

二叉树最近公共父节点

2012-10-06 02:09 274 查看
在二叉树中,查找两个子节点的最近公共父节点。实现方法:首先找到每个子节点的路径,然后再比较两个路径最后一个相同节点,既最近公共父节点。

二叉树的数据结构如下

typedef struct _node
{
char data;
struct _node* lchild;
struct _node* rchild;
}node;


查找子节点的路径,利用链表list来实现

bool findNodePath(node* root, char elem, list<node*> &path)
{
if (!root) return false;
path.push_back(root);
if (elem==root->data) return true;
if(findNodePath(root->lchild,elem,path)) return true;
if(findNodePath(root->rchild,elem,path)) return true;
path.pop_back();
return false;
}


利用上述findNodePath函数,就可以很容易得到最近公共父节点

node* findNearestParent(node* root, char elem1, char elem2)
{
list<node*> path1,path2;
if (findNodePath(root,elem1,path1)&&findNodePath(root,elem2,path2))
{
list<node*>::iterator iter1=path1.begin();
list<node*>::iterator iter2=path2.begin();
while(*iter1==*iter2)
{
iter1++;
iter2++;
}
return *(--iter1);
}
return NULL;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: