比如中序遍历左中右(适用于一棵仅有三个节点的小二叉树和由无数小的二叉树构成的大二叉树,区别在与小二叉树的子树是一个节点(最小的树),大二叉树的是一棵较大的树,都是符合二叉树的定义)

二叉树是一个抽象的概念,不要被名字误导,二叉树存储的信息包括二叉树的节点值和节点与节点之间的关系,理解了这层逻辑,叫二叉啥都无所谓。

中序遍历就是对二叉树中存储的信息进行读取的一种方式。读取的原则是先读取左子树的信息,再读取根节点的信息,再读取右子树的信息,这个简称逻辑A(如果子树中还有更小的子树-左子树或右子树, 根节点就是自身,不存在多态现象,根节点起连接节点关系的作用,这个子树中也执行同样的逻辑A,那么就可以将整棵树的信息按照中序遍历这种信息提取方式进行读取),其他遍历顺序同理。

关于递归容易让人产生迷雾,需要认识到的是递归函数是一个会调用自身的函数,这点和普通函数有区别,其之所以写起来代码简洁也是来源于这个性质。

递归函数很适合遍历一颗二叉树,因为递归函数自身调用自身的性质和二叉树节点连接节点的性质是一致的。

递归相关的题型可以用和“数形结合”类似的“码形结合”来分析,在脑海中左边是代码,右边是二叉树图像,这两者是可以对应联系起来的。

JavaScript的函数套函数性质可以实现求解一些不是用递归能一下解决、但递归可以作为求解此问题的核心思想的题目,因为递归过程中的参数在外层函数的作用域中。