算法题14 最低公共祖先
来源:互联网 发布:为什么江老是被黑 知乎 编辑:程序博客网 时间:2024/06/06 01:12
题目
给定一棵树,同时给出树中的两个结点(n1和n2),求它们的最低公共祖先。
分析1
最直观的想法是判断某节点的左子树和右子树如果分别包含一个节点n1或n2,也就是一边一个,那该节点就是他们的最低公共祖先。可以用递归的方式依次判断左右子树求解
代码
1 TreeNode* FirstCommonParent2(TreeNode* root,char a,char b) 2 { 3 if(root->value==a||root->value==b) 4 { 5 return root; 6 } 7 8 TreeNode* left,right; 9 if (root->pLeft)10 {11 left=FirstCommonParent2(root->pLeft,a,b);12 }13 if (root->pRight)14 {15 right=FirstCommonParent2(root->pRight,a,b);16 }17 18 if (left&&right)19 {20 return root;21 } 22 23 return (left)?left:right;24 }
分析2
如果将根节点到给出的两个节点的路径找到,然后就可以求两条路径的最后一个公共节点了。查找一个节点的路径可以用递归的方式实现
1 ListNode* PrintPath1(TreeNode* root,char c) 2 { 3 if (root->value==c) 4 { 5 ListNode* node=new ListNode(); 6 node->value=c; 7 node->pNext=NULL; 8 return node; 9 }10 ListNode* left=NULL;11 ListNode* right=NULL;12 if (root->pLeft)13 left=PrintPath1(root->pLeft,c);14 if (root->pRight)15 right=PrintPath1(root->pRight,c);16 17 if (left||right)18 {19 ListNode* node=new ListNode();20 node->value=root->value;21 node->pNext=(left)?left:right;22 return node;23 }24 25 return NULL;26 }
1 void FirstCommonParent(TreeNode* root,char a,char b) 2 { 3 if(root==NULL) 4 { 5 return; 6 } 7 8 ListNode* list1=PrintPath1(root,a); 9 ListNode* list2=PrintPath1(root,b);10 11 ListNode* node;12 while (list1&&list2&&list1->value==list2->value)13 {14 node=list1;15 list1=list1->pNext;16 list2=list2->pNext;17 }18 cout<<node->value<<endl;19 }
0 0
- 算法题14 最低公共祖先
- 最低公共祖先
- 最低公共祖先问题
- 树最低公共祖先
- 最低公共祖先
- 最低公共祖先
- 最低公共祖先LCA
- 编程算法 - 二叉树的最低公共祖先 代码(C)
- 算法面试——二叉树最低公共祖先LCA
- 算法:寻找树中两个结点的最低公共祖先
- 算法题目---树中两个结点的最低公共祖先
- 树中两个节点最低公共祖先系列算法
- 求两颗树的最低公共祖先
- 树的最低公共祖先
- 二叉树最低公共祖先
- Tree-----最低公共祖先系列
- lowest common ancestor 最低公共祖先
- 求树中两个节点的最低公共祖先
- CodeForces 622C Not Equal on a Segment
- 算法题12 数组中所有的逆序对
- Android设计模式系列(2)--SDK源码之观察者模式
- 算法题13 排序算法(更新快排)
- iOS单元测试
- 算法题14 最低公共祖先
- 数据仓库专题20-案例篇:电商领域数据主题域模型设计v0.1(改进意见征集中)
- android 反编译
- android触摸事件传递
- 在 Web 项目中应用 Apache Shiro
- 算法题15 二叉树的最长的路径长度&&最大路径和
- 算法题16 二分查找及相关题目
- Android 如何进行js交互
- 算法题17 重建二叉树