转载:http://www.cnblogs.com/GoAhead/archive/2012/05/22/2513847.html 二叉树的深度,递归和非递归实现 递归实现基本思想: 为了求得树的深度,可以先求左右子树的深度 ...
一 递归的方法 思路: 我们可以从另一个角度来理解树的深度: 如果一棵树只有一个结点,那么它的深度为 如果根结点只有左子树没有右子树,那么树的深度是左子树的深度加 ,加 是加上根节这一层。 如果既有左子树又有右子树,那么树的深度应该是左 右子树中深度较大的值再加 二 非递归方法 思路 采用层次遍历的方法,类似bfs的解法 每遍历一层,depth 每一层,需使用一个变量len记录该层的结点个数,也就 ...
2017-11-24 19:29 0 5496 推荐指数:
转载:http://www.cnblogs.com/GoAhead/archive/2012/05/22/2513847.html 二叉树的深度,递归和非递归实现 递归实现基本思想: 为了求得树的深度,可以先求左右子树的深度 ...
在上一篇博客中,实现了Java中二叉树的四种遍历方式的递归实现,接下来,在此实现Java中非递归实现二叉树的前序、中序、后序、层序遍历,在非递归实现中,借助了栈来帮助实现遍历。前序和中序比较类似,也简单一些,但是后序遍历需要两个栈来进行辅助,稍微复杂一些,层序遍历中借助了一个队列来进行实现 ...
递归实现基本思想: 为了求得树的深度,可以先求左右子树的深度,取二者较大者加1即是树的深度,递归返回的条件是若节点为空,返回0 算法: 非递归实现基本思想: 受后续遍历二叉树思想的启发,想到可以利用后续遍历的方法来求二叉树的深度,在每一次输出的地方替换成算栈S的大小 ...
在这里看到了这个题。层次遍历是用队列,一级一级地入队列然后输出。而用递归的话,我首先想到是用两个栈来模拟队列,在递归遍历二叉树的过程中入栈,然后最后一次性出栈。但仔细思考后发现无法做到层次遍历。在这里看到了正确的方法。 主要代码如下: 这个算法先 ...
二叉树的递归很简单,但是非递归就有点复杂了。 第一种先序遍历、中序遍历、第一种后序遍历都是一直将左子树压入栈,其中先序遍历和中序遍历输出位置不同,后序遍历则需要前驱标记pre来判断右孩子是否访问过; 第二种先序遍历和第二种后序遍历是根据层序遍历的思想写的,将队列换成栈,顺序换成先入右孩子再入左 ...
二叉树中又有二叉树,也就是递归。因此使用递归创建二叉树是最简单的。思路很简单:我们申明一个结构体TREENODE,该结构体有三个成员,分别是Value,LeftChild和RightChild。 代码如下: typedef struct _struct_tree_node ...
二 叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是 递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法 ...