找出二叉树中两个节点的最低共同父节点
2012-07-20 10:31
169 查看
算法设计:后续遍历此二叉树,将两个节点的父节点分别放入两个链表中,然后顺序对比,找出最后一个相同的节点,既是最低共同节点
C伪码实现:
C伪码实现:
List *h,*h1,*h2; bool find1=false,find2=false; void postVisit(BTNode *root) { if(root!=null) { add(root,h); //将root结点加入以h为表头的链表中 postVisit(root->lchild); if(root->lchild!=NULL) delete(root->lchild,h); //从h链表中删除root右孩子结点 postVisit(root->lchild); if(root->rchild!=NULL) delete(root->rchild,h); //从h链表中删除root左孩子结点 if(root->value == v1) { copy(h,h1); //找到第一个所需结点 将h链表中的所有节点copy到h1中 find1=true; } else((root->value == v1)) { copy(h,h2); //找到第二个所需结点 将h链表中的所有节点copy到h2中 find2=true; } if(find1 && find2) //两个链表形成,退出后序遍历 return; } } void findParentNode(BTNode *root) { postVisit(root); for(List *p1=h1,*p2=h2;p1->next->node!=p2->next->node && p1!=NULL && p2!=NULL;p1=p1->next,p2=p2->next); if(p1->node!=p2->node) //此时没有公共结点,可能没有找到目标结点 printf("not same parent"); else printf(p1->node); //输出最低公共结点 }
相关文章推荐
- 找出二叉树上任意两个节点的最近共同父节点
- 二叉树两个结点的最低共同父节点
- 二叉树两个最低的共同父节点
- 找出二叉树中任意两个节点的最低公共父节点
- 寻找二叉树两个结点的最低共同父节点
- 算法-寻找二叉树两个结点的最低共同父节点(OC实现)
- 寻找二叉树两个结点的最低共同父节点
- 判断二叉树中两个节点的最低共同父节点
- 程序员面试100题之五 二叉树两个节点的最低共同父节点
- 寻找二叉树两个结点的最低共同父节点(2014京东笔试题)
- 算法: 在二叉树中找到两个节点的最低共同父节点
- 判断二叉树中两个节点的最低共同父节点
- 二叉树中两个节点的最低公共祖先
- C++算法之 求二叉树两个节点的最低公共节点
- 面试题50:二叉树中两个节点的最低公共祖先
- 找出树中两个节点的最低公共祖先
- 寻找二叉树两个节点的最低公共祖先
- 寻找二叉树两个节点的最低公共祖先
- 求二叉树中两个节点的最低公共父节点
- 一颗普通的二叉树,如何寻找两个节点的最低公共祖先(发现的一个与算法无关的引用问题)