在做二叉树的时候,很多时候,对于刚开始的同学来说,应该都是比较困难的,今天我将用数学的角度来和同学们分享解答二叉树的相关问题如何求解。
其实,二叉树如果你想通过循环来进行,很多时候都是很复杂并且可能不能实现的,那么,一般情况下,二叉树的相关问题(至少目前我所讲的简单的二叉树),都可以用递归简单的完成。
说到这里,我便想讲讲递归的实质。递归其实就是中学阶段大家学过的数列,作为一个接触过数学竞赛的学生,我想说,计算机中的递归就是数列的暴力实现,什么是数列,数列就是一串满足某些相同关系的数的集合,即通过某些项,我可以求后面的项,以此类推,数列的无穷项理论都是可行的。在中学阶段我们不能用暴力方式求的通项,只能用一些巧妙的方式来求的通项公式,而计算机就是让我们避开巧妙,利用计算机的庞大算力,直接求的结果
这是一个标准的斐波那契数列,我们首先有基本项,然后通过已知的方式,就可以求的第n项,有人肯定要问为什么要给出两个基础项,因为只有有了开始的两项才能递归,这个基础项视情况而定,下面我们来看看斐波那契数列的
分析这个函数就是首先给出你他的前两项,如果没有到,就给出他的计算机制
那么,如果是对于二叉树,我们应该怎么思考呢?首先,我们必须将二叉树将一个二叉树看成一个root节点和左子树和右子树(即递归的思想,将左子树和右子树看作下一次递归的root以此类推),这里我将给出做二叉树的模板。
这里给出了一道中等难度的oj题,不难发现,对于二叉树的递归问题,无非就是上面总结的三部,首先给出空指针的操作,其次就是分析对root的操作,最后用原函数作用于左子树和右子树。当然对root的操作可能伴随着对左子树和右子树的操作,本题就是一个典型。
总结:再好的方法都不如自己写一遍,所以我今天在这里只是客观分析了二叉树的基本做法,如果感兴趣,也可以关注我的上一篇博客:二叉树递归中隐藏的恐怖的复杂度问题