当前位置:网站首页>二叉树递归套路总结

二叉树递归套路总结

2022-07-05 22:50:00 明朗晨光

之前所有用到二叉树递归套路的时间复杂度都是 O ( N ) O(N) O(N),其中 N N N 是二叉树的节点个数,且都是最优解。

某个节点从左右孩子获取信息,然后整合到该节点,此时的左右孩子已经不需要了,而该节点的父节点也是重复这个过程,整个过程相当于后序遍历在树上做动态规划,所以叫做树型dp

这个套路包括两个层次:

  1. 思想提醒
    目标如何实现:X 为根节点的二叉树如何实现目标?
    实现手段:向左右树要信息,列举可能性,这个可能性一定是基于从左右树要来的信息(常数时间内可以得到的),加工出来的同等量级的信息也是常数时间的。
    设计信息体,分析可能性,常见的分类是 “与目标 X 有关” 和 “与目标 X 无关”。

  2. 模板
    ① 设计 Info 信息体;
    process 函数:process 函数一定要返回 Info;遇到空的时候,如果值不好设置就返回空,如果好设置就设置;
    ③默认先得到左树信息,然后得到右树信息;
    ④分析完可能性后,把 X 需要的信息都加工出来,这是高度模板化的。

这个套路可以解决绝大多数的二叉树问题尤其是树型dp问题,本质是利用 递归遍历二叉树 的便利性。

整个流程总结如下:

1)假设以 X 节点为根,假设可以向 X 左树和 X 右树要任何信息

2)在上一步的假设下,讨论以 X 为根节点的树,得到答案的可能性最重要)

3)列出所有可能性后,确定到底需要向左树和右树要什么样的信息

4)把左树信息和右树信息求全集,就是任何一棵子树都需要返回的信息S

5)递归函数都返回S,每一棵子树都这么要求

6)写代码,在代码中考虑如何把左树的信息和右树信息整合出整棵树的信息

原网站

版权声明
本文为[明朗晨光]所创,转载请带上原文链接,感谢
https://maureen.blog.csdn.net/article/details/125621052