二叉树遍历基础 -- 递归与非递归的实现方法
之前也写过不少关于二叉树的东西了,但是总体来说,二叉树还是一个很绕的东西,所以单独择出来写一篇笔记,之前也没计划什么的,就想到什么写什么吧。不过该篇文章的 主要内容是关于二叉树的三种遍历(前序、中序、后序)不同的实现方式(递归与非递归) 。 首先,我觉得很有必要去彻底理解一下递归。 (1)递归的主体大概分两部分:递归停止的条件、递归内容。 (2)递归应用的实例:这个超级多,就比如最典型的 斐波那契数列 。个人认为,可以用循环实现的,递归基本上都可以实现,但有时递归的效率不如循环。 (3)递归又分为单递归与多递归(二叉树的三种遍历递归方法均用到了双递归!) 根据上面的三点,举个例子先。 假设当x=0时,F(x)=1;否则F(x)=F(n-1)*n。这个时候就可以用递归了,代码实现如下。 class Solution{ public int F(int n) { //递归停止条件 if (n == 0) { return 1; } //递归内容 else { return F(n - 1) * n; } } } 代码分析一下如下: 二叉树的三种遍历:前序(根左右)、中序(左根右)、后序(左右根) 首先看 三种遍历的递归实现方法 。(特点:代码清晰,量少,但不易理解) // (1)前序遍历 public TreeNode PreOrder(TreeNode pRoot) { /