leetcode刷题笔记——树

1.合并二叉树

水题QAQ

递归方法:我们可以对这两棵树同时进行前序遍历,并将对应的节点进行合并。在遍历时,如果两棵树的当前节点均不为空,我们就将它们的值进行相加,并对它们的左孩子和右孩子进行递归合并;如果其中有一棵树为空,那么我们返回另一颗树作为结果;如果两棵树均为空,此时返回任意一棵树均可(因为都是空)。

 

2.二叉树的直径

image.png

假设我们知道对于该节点的左儿子向下遍历经过最多的节点数 LL(即以左儿子为根的子树的深度) 和其右儿子向下遍历经过最多的节点数 RR (即以右儿子为根的子树的深度),那么以该节点为起点的路径经过节点数的最大值即为 L+R+1。

我们记节点node 为起点的路径经过节点数的最大值为 dnode ,那么二叉树的直径就是所有节点 dnode
的最大值减一。

最后的算法流程为:我们定义一个递归函数 depth(node) 计算 dnode,函数返回该节点为根的子树的深度。先递归调用左儿子和右儿子求得它们为根的子树的深度 LL 和 RR ,则该节点为根的子树的深度即为

max(L,R)+1,该节点的 dnode​值为

L+R+1

递归搜索每个节点并设一个全局变量 ans 记录 dnode的最大值,最后返回 ans-1 即为树的直径。

算法时间复杂度 O(N).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder_by

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值