递归是强大的问题求解工具,是程序设计中的一种重要思想和机制。递归有助于写出清晰易懂的代码,能有效提高程序的整体风格。此外,很多算法的实现都有赖于递归函数,例如DFS、回溯、动态规划等。通常,在下面三种情况下递归的方法会被用到:1)定义是递归的;2)数据结构是递归的;3)问题的解法是递归的。二叉树是一种典型的递归数据结构。因此,很多跟二叉树有关的问题用递归的代码来求解都是最方便的。本文主要以LeetCode中的题目为例,演示利用递归的方法解决二叉树有关问题的技巧与方法。同时,推荐参考《算法之美:隐匿在数据结构背后的原理》一书中的相关章节以了解更多本文未能充分尽述的细节(该书中的代码以C++写成)。
这是《深入理解二叉树与递归》系列文章的第2篇,这篇文章中涉及的问题都跟Ancestor有关。因为二叉树都是递归定义的,通常给定一个根节点root,可以知道它的左右子树(root.left, root.right),但