二叉树最近公共父节点
2012-10-06 02:09
274 查看
在二叉树中,查找两个子节点的最近公共父节点。实现方法:首先找到每个子节点的路径,然后再比较两个路径最后一个相同节点,既最近公共父节点。
二叉树的数据结构如下
查找子节点的路径,利用链表list来实现
利用上述findNodePath函数,就可以很容易得到最近公共父节点
二叉树的数据结构如下
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; }
相关文章推荐
- [转]程序员面试100题之十六:二叉树中两个节点的最近公共父节点
- 算法题16 二叉树最近公共父节点
- 笔试算法题(24):找出出现次数超过一半的元素 & 二叉树最近公共父节点
- 二叉树最近公共父节点
- 二叉树(12)----查找两个节点最低祖先节点(或最近公共父节点等),递归和非递归
- 求二叉树中两个节点的最近公共父节点
- 二叉树最近公共父节点
- 【二叉树】求二叉树中两个节点的最近公共父节点
- 二叉树中两个节点的最近公共父节点
- 二叉树中两个节点的最近公共父节点
- 二叉树中两个节点的最近公共父节点
- 二叉树中两个节点的最近公共父节点
- 二叉树最近公共父节点
- 二叉树中两个节点的最近公共父节点 非二叉排序树
- 二叉树中两个节点的最近公共父节点
- 【二叉树12】求一颗二叉树中两个节点的最近公共父节点
- 二叉树中两个节点的最近公共父节点
- 二叉树最近公共父节点
- 二叉树中两个节点的最近公共父节点 使用二叉排序树
- 二叉树最近公共父节点