标签:二叉树 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/
标签:二叉树 leetcode lintcode 九章算法 面试题
原文地址:http://blog.csdn.net/jiuzhang_ninechapter/article/details/45681163