二叉树:利用二叉树的后序遍历解决部分树型动态规划问题

1. 算法流程 (4步)

可以解决面试中绝大多数的二叉树问题,尤其是树型dp问题

步骤如下:
在这里插入图片描述

加深理解:

  1. 一方面,其本质上是利用递归后序遍历去解决问题,因为后序遍历是左右根,这样才能先知道左右树的信息,再去处理当前结点。【当然同理“右左根”也行,只需要保证根在最后即可】
  2. 从另一方面看,每次将左右子树的信息整合并返回后,该左右子树的信息就不要了。这又是动态规划的思想。

2. 第二步中的3种情况

2.1 左子树怎样,右子树怎样,且左右子树间满足某种条件

技巧:通常是问什么,左右子树就是什么,然后去找左右子树的约束条件

例题:

  1. 二叉树:求二叉树的最大树高

  2. 二叉树:判断二叉树是不是满二叉树「二叉树的递归套路」

  3. 判断二叉树是不是平衡二叉树

  4. 二叉树:判断二叉树是不是完全二叉树「二叉树的递归套路」

  5. 二叉树:给定一棵二叉树的头节点head,和另外两个节点a和b,返回a和b的最低公共祖先「二叉树的递归套路」

2.2 讨论与x有关和与x无关两种情况

在第2步中,常常将情况分为两类:

  1. 与x有关…
  2. 与x无关…

小细节:写于编写x有关无关的代码时,将无条件的代码放在前面,将有条件的代码放在后面。如果都有条件或都无条件则无先后顺序。

例题:

  1. 给定一棵二叉树的头节点head,返回整棵二叉树的最大距离「二叉树的递归套路」

3. 第四步中的2种常用手法

在第4步中,关于递归边界:

  • 如果Info的所有字段值都好设置,则直接设置:if(root == null) return new Node(设置信息);
  • 如果Info的部分字段值不好设置,则返回null:if(root == null) return null;。其处理逻辑如下:
    在这里插入图片描述

例题:

  1. 二叉树:判断是不是二叉搜索树「二叉树的递归套路」
  2. 给定二叉树的头节点head,返回此树中最大的二叉搜索子树的大小「二叉树的递归套路」

4. 推广到解决n叉树

例题:

  1. 二叉树 | n叉树:派对的最大快乐值「二叉树的递归套路推广到n叉树」
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ElegantCodingWH

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

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

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

打赏作者

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

抵扣说明:

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

余额充值