码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树中寻找共同节点的最低公共祖先节点

时间:2014-08-03 15:21:24      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   java   使用   strong   2014   

问题:在一棵二叉树中,给定两个节点,求这两个节点的最低的公共祖先节点,如下图中的,节点 6 和 节点 9 的最低公共祖先节点是节点 5.

bubuko.com,布布扣

最容易联想到的是,这个问题似乎与公共子串的问题有关系,如果我们能求出两个节点到根节点的路径,再使用匹配算法得到公共的路径,取这个路径上最后一个节点,即是所求的最低公共祖先节点。

哈夫曼编码启迪了我,我打算使用 0 表示向左走,1 表示向右走。如,101 表示自根节点,走到右孩子 A,再走到 A 的左孩子 B,再走到 B 的右孩子 C 。于是,根节点到节点 C 的路径便可以使用整数 101 ,即 5 表示,基于这个思路,我们只需要用一个整数即可表示根节点到任何一个节点的路径(如果这个路径大于 32 ,我们可以考虑使用大整数,或者模拟一个大整数)。

bubuko.com,布布扣

想到了这一层,就没有什么难度了,我们只需要针对两个节点,分别求出根节点(如果题目要求的是自根节点开始算起)到这两个节点的路径,再求公共路径上最后一个节点即可。

给出源代码。


该题来源:

何海涛博客:http://zhedahht.blog.163.com/blog/static/25411174201081263815813/

该作者在文章中提到了两种解法,一种是递归的,如果两个节点都在当前节点的左子树,或者右子树中,那么,它们的最低公共祖先节点必然在左子树或者右子树中。如果分散在两个子树中,那么,当前节点就是最低公共祖先节点。

另一种与本文解法类似,只不过空间复杂度要高于本文解法。

二叉树中寻找共同节点的最低公共祖先节点,布布扣,bubuko.com

二叉树中寻找共同节点的最低公共祖先节点

标签:style   blog   http   color   java   使用   strong   2014   

原文地址:http://blog.csdn.net/lizhihaoweiwei/article/details/38357277

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