java二叉树的建树_求二叉树建树代码最简单的做法,一定要快,时间复杂度不是问题...

第一个问题您可以参考一下线段树

第二个问题,观察一下树的结构会发现叶子结点的出度一定为0,那么答案就显然了

第三个问题,建树的时候统计深度 参考lca .. 说实话 您这个公式我没有看懂什么公式,我这里就随便拉个公式吧

关于计算深度的两个公式,第一个公式要求:求两个结点的距离,设这两点为u, v,距离根节点的距离为d[u], d[v] 那么一定有 u->v :d[u] + d[v] - 2 * d[lca(u,v)] ,这个公式很显然

第二个公式:给你四个点 $u_1, v_1, u_2, v_2$,且$u_1, v_1$ 连接,$u_2, v_2$ 连接,让你判断这两个线是否有重叠(经历相同的点),设dist[x]为x点距离根节点的距离,那么一定有dist[1, y1] + dist[x2, y2] >= dist[x1, x2] + dist[y1, y2] 且 dist[x, y] = depth[x] + depth[y] - 2 × depth[lca(x, y)]

第四个问题,斐波那契树没学(我觉得也不会考quq)

希望能帮到您

回答于2019-09-19 02:43

自己打自己脸了…… –

Live

2019-09-21 01:00

@Live:

现在突然发现时间复杂度又成了一个问题…… –

Live

2019-09-21 00:57

线段树的话时间复杂度效率比较低吧,但是我觉得所有的递归时间和空间效率都低,而且某些题时间复杂度要求很苛刻,但是他还需要用递归思想,很头痛 –

Live

2019-09-21 00:51

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值