码迷,mamicode.com
首页 > 编程语言 > 详细

九章算法面试题56 最近公共祖先

时间:2015-05-13 10:28:54      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:二叉树   leetcode   lintcode   九章算法   面试题   

九章算法官网-原文网址


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 最近公共祖先

标签:二叉树   leetcode   lintcode   九章算法   面试题   

原文地址:http://blog.csdn.net/jiuzhang_ninechapter/article/details/45681163

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!