编号满二叉树 - 寻找任意两结点的最近共同祖先

这是第一篇“技术性”博客,希望以后越写越多越好咯,本科生的期许hhh

以下是题目信息

题目信息

这道题运用的主要性质就是对于满二叉树任意结点编号i ,其parent(若有) 为 i/2

关键在于对算法的优化


Version 1.0

一开始只想把代码写出来,于是用了 < math.h >的pow函数,意图先算出两个结点的level,然后根据level 的差值将高位的结点“拉到”与地位的结点同一高度,然后再共同向上寻找祖先.


Version 2.0

V1的最大缺点(相对于v2)就是pow函数的使用使得代码复杂度变成了
O(1+2+…+level_a) + O(1+2+…+level_b) (毕竟pow执行了这么多次)
而显然可以通过记录一个数来使复杂度变为 O(1+2+…+level_bigger)
但仍然很慢,因为这种方法有这么几步

  1. 找到两个数的level
  2. 将较高的level降低到同一level(通过不断除以2)
  3. 不断同时除以2以找到共同结点(这是
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值