求二叉树中节点的最大距离(比较适合我理解思路)

[color=violet][size=xx-large]求二叉树中节点的最大距离[/size][/color]

求二叉树中节点的最大距离,两个节点的距离的定义是这两个节点间边的个数,比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2。

这是论坛上的一道算法题,我目前想到的解法是:
二叉树中任意两个节点间的最大距离,那么其中一个节点必定是层次最深的一个节点,记该节点为A。该二叉树中层次最深的节点可能有多个,但只需要选择其中一个记为A。找出了A,那么遍历二叉树中其它非A的节点,访问各节点的时候求出该节点到A的距离,从而记录下求到的最大距离。[color=green][size=large]因此题目可以转化为:求一个二叉树中,给定的两个节点间的距离。[/size][/color]

首先就要求出这两个不同的节点间的公共父节点,这个题目出过多次了,解法是:
假设两个节点为A和B,中序遍二叉树,遍历的时候记录下各节点的层次深度,同时,遇到A或者B的时候开始记录层次最浅的节点,直到遇到B或者A的时候,或者遇到根节点(层次深度为0)的时候,终止记录。那么,记录下来的层次最浅的节点就是A和B的公共父节点。
[color=green]这个求公共父节点算法的原理是A和B的公共父节点必在中序遍历后的A和B之间。[/color]

如果求得两个不同节点(记为A和B)之间的公共父节点(记为P),那么事情就很简单了,A和B之间的距离就是A和P之间的距离,加上B和P之间的距离,也就是A和P之间的层次差,与B和P之间的层次差,它们两者之和。

这只是一个初步的算法,远远算不上高效,因为找到A之后,还需要两次嵌套遍历二叉树,外层是求各个节点到A的距离,内层是求各个节点与A的公共父节点。正因为如此,应该存在巨大的优化空间。

转:http://liouwei20051000285.blog.163.com/blog/static/25236742011443514198/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值