一、 递归的方法 思路: 我们可以从另一个角度来理解树的深度: 如果一棵树只有一个结点,那么它的深度为1; 如果根结点只有左子树没有右子树,那么树的深度是左子树的深度加1,加1是加上根节这一层。 如果既有左子树又有右子树,那么树的深度应该是左、右子树中深度较大的值再加 ...
递归实现基本思想: 为了求得树的深度,可以先求左右子树的深度,取二者较大者加 即是树的深度,递归返回的条件是若节点为空,返回 算法: 非递归实现基本思想: 受后续遍历二叉树思想的启发,想到可以利用后续遍历的方法来求二叉树的深度,在每一次输出的地方替换成算栈S的大小,遍历结束后最大的栈S长度即是栈的深度。 算法的执行步骤如下: 当树非空时,将指针p指向根节点,p为当前节点指针。 将p压入栈S中, 压 ...
2012-05-22 20:57 0 28916 推荐指数:
一、 递归的方法 思路: 我们可以从另一个角度来理解树的深度: 如果一棵树只有一个结点,那么它的深度为1; 如果根结点只有左子树没有右子树,那么树的深度是左子树的深度加1,加1是加上根节这一层。 如果既有左子树又有右子树,那么树的深度应该是左、右子树中深度较大的值再加 ...
再反回,这不禁让人联想到栈,而想要实现二叉树的非递归遍历,就需要用栈的思想来实现 先序遍历(DLR) ...
二叉树的遍历方式: 1、深度优先:递归,非递归实现方式 1)先序遍历:先访问根节点,再依次访问左子树和右子树 2)中序遍历:先访问左子树,再访问根节点吗,最后访问右子树 3)后序遍历:先访问左子树,再访问右子树,最后访问根节点 2、广度优先 按照树的深度,一层 ...
通过递归算法与非递归算法的比较,更好地理解各自的特点。非递归其实就是调用栈的基本操作,进栈,出栈等。 这里面也正好复习了下栈的基本算法的实现。 栈和队列的实现在我的前一篇博文里。 基本数 ...
...
遍历二叉树可以用递归的方法去实现,也可以用非递归的方法去实现。递归代码的好处是简洁,直观,最主要的还是递归的代码少,很快就可以写完。但我们知道,递归的调用会用到一个专门的栈,这个栈的深度是有限的,如果递归函数调用的次数很多,超过栈限制的深度,那么程序就会崩溃。这个时候就需要把递归的代码改为非 ...
这篇文章用来复习AVL的平衡操作,分别会介绍其旋转操作的递归与非递归实现,但是最终带有插入示例的版本会以递归呈现. 下面这张图绘制了需要旋转操作的8种情况.(我要给做这张图的兄弟一个赞)后面会给出这八种情况对应平衡实现. [1] 情况1-2: 这种需要旋转的结构 ...
最近在刷leetcode时,刷到了二叉树中序遍历的题目,所以特在此记录一下,下面我将给出中序遍历的递归实现和非递归(迭代)实现的代码与算法思想: 1. 中序遍历的递归实现: 递归实现的算法思想:先中序遍历左子树,然后访问根节点,最后访问右子树。 2. 中序遍历的非递归 ...