九章算法面试题56 最近公共祖先
来源:互联网 发布:java divide是什么 编辑:程序博客网 时间:2024/06/08 15:40
九章算法官网-原文网址
http://www.jiuzhang.com/problem/56/
题目
给出一棵二叉树和两个二叉树上的节点,求出这两个点的最近公共祖先(Lowest Common Ancestor, LCA)。
如下面这棵二叉树:
1
/ \
2 3
/ \
4 5
4和5的最近公共祖先是3,2和4的最近公共祖先是1,1和3的最近公共祖先是1(假设自己是自己的祖先)
Follow Up Question 1: 如果树中的每个节点存储了自己的parent节点,算法应该是什么样的?
Follow Up Question 2: 如果树中的每个节点没有存储自己的parent节点,但给你这棵二叉树的根节点,算法应该是什么样的?
解答
对于有parent节点的二叉树,方法很简单,就是分别从两个节点网上列出到根的所有点,再反向查找第一个分叉的位置。
对于没有parent节点的二叉树,必须给出root。然后从root开始用分治算法往两边查找两个节点。如果有LCA就返回LCA,如果碰到其中一个点就返回其中一个点。
参考程序
http://www.ninechapter.com/solutions/lowest-common-ancestor/ http://www.ninechapter.com/solutions/lowest-common-ancestor/ http://www.ninechapter.com/solutions/lowest-common-ancestor/ http://www.ninechapter.com/solutions/lowest-common-ancestor/
- 九章算法面试题56 最近公共祖先
- 【面试题之算法部分】LCA最近公共祖先
- 最近公共祖先,Targin算法
- LCA最近公共祖先算法
- LCA最近公共祖先算法
- LCA最近公共祖先算法
- 九章算法面试题21 寻找最近单词对
- 【面试题】剑指Offer-50-求两个节点的最近公共祖先
- 面试题50:求二叉树中两个节点的最近公共祖先
- 【IT笔试面试题整理】寻找二叉树两节点的最近的公共祖先
- 最近公共祖先算法(LCA)
- 最近公共祖先算法(LCA)
- HDU2586(最近公共祖先的Tarjan算法)
- LCA最近公共祖先(tarjan离线算法)
- 最近公共祖先LCA:Tarjan算法
- 最近公共祖先LCA Tarjan算法
- 最近公共祖先(Tarjan算法)
- 最近公共祖先LCA Tarjan算法
- 九章算法面试题53 第一个出错的代码版本
- 九章算法面试题54 带重复元素的全排列
- Android如何防止apk程序被反编译和Android如何反编译apk
- 九章算法面试题55 旋转字符串
- Cocos2D来制作横版过关游戏1
- 九章算法面试题56 最近公共祖先
- PHP 程序员学数据结构与算法之《栈》
- 九章算法面试题57 拷贝带随机指针的链表结构
- PHP代码:基本数据结构和php内置函数
- 九章算法面试题58 背包问题
- 九章算法面试题59 背包问题II
- 九章算法面试题60 爬楼梯
- 数据结构之关于树的操作(树的递归和非递归遍历)-(四补)
- 九章算法面试题61 克隆图