面试经典(5)--二叉树最低公共祖先LCA
来源:互联网 发布:淘宝店基础版页头全屏 编辑:程序博客网 时间:2024/05/23 12:04
题目:输入二叉树的俩个节点,求它们的最低公共祖先
算法分析:我们直接来分析O(n)的算法。
比如求节点F和节点H的最低公共祖先,先求出从根节点A到F的路径,再求出A到H的路径,那么最后一个相同的节点就是最低公共祖先。A->B->D->F和A->B->E->H,最后相同的节点事B,所以最低公共祖先是B节点。求根节点到指定节点的算法先前已经更新过了,复杂度是O(n),所以总的时间复杂度是O(n)。
获取从根节点到指定节点的函数代码:
struct BinaryNode{char value;BinaryNode *left;BinaryNode *right;};求跟节点到指定节点路径:
bool GetNodePath(BinaryNode *pRoot,BinaryNode *pNode,vector<BinaryNode*> &v){if(pRoot==NULL)return false;v.push_back(pRoot);if(pRoot==pNode)return true;bool found=GetNodePath(pRoot->left,pNode,v);if(!found)found=GetNodePath(pRoot->right,pNode,v);if(!found)v.pop_back();}
求最低公共祖先节点:
BinaryNode* GetCommonParent(BinaryNode *pRoot,BinaryNode *pNode1,BinaryNode *pNode2){if(pRoot==NULL || pNode1==NULL || pNode2==NULL)return NULL;vector<BinaryNode*> v1,v2;GetNodePath(pRoot,pNode1,v1);GetNodePath(pRoot,pNode2,v2);BinaryNode *pLast=pRoot;vector<BinaryNode*>::iterator ite1=v1.begin();vector<BinaryNode*>::iterator ite2=v2.begin();while(ite1!=v1.end() && ite2!=v2.end()){if(*ite1==*ite2)pLast=*ite1;ite1++;ite2++;}return pLast;}
0 0
- 面试经典(5)--二叉树最低公共祖先LCA
- 算法面试——二叉树最低公共祖先LCA
- 寻找二叉树两个节点的最低公共祖先(LCA)
- 最低公共祖先LCA
- 树---求给定二叉树中两节点的最低公共祖先(LCA)
- 树---求二叉搜索树中两节点的最低公共祖先(LCA)
- 二叉树最低公共祖先
- LCA树两个节点最低公共祖先
- 二叉树-最近公共祖先(LCA)
- 二叉树最近公共祖先(LCA)
- 树——在二叉树中找到两个节点的最低公共祖先LCA
- 二叉树的最低公共祖先(剑指offer)
- 二叉搜索树的最低公共祖先
- 二叉树的最近公共祖先LCA
- 树最低公共祖先
- 二叉树经典面试题3~树中两个结点的最低公共祖先
- 最低公共祖先问题(LCA) 举一反三
- [2016/12/2]求二叉查找树结点的最低共有祖先(LCA)
- MCF52259 ADC 模块配置
- 3招保正你的网站搜索引擎排名直线上升!
- SP2010开发和VS2010专家"食谱"--第一章节--列表和事件Receiver(3)--开发者仪表板
- 个人笔记分享—IOS类库小节
- uboot的start.s分析笔记
- 面试经典(5)--二叉树最低公共祖先LCA
- 关于产品的一些思考——四季凯芯之问我
- RMAN传输表空间迁移数据
- 第7周作业1-循环大战
- Learning Theory
- 异或巧解筷子问题
- 携手红尘。无缘的人
- Android横竖屏切换和灭屏亮屏时Activity的生命周期探究(2)
- IOS状态栏适配问题