一个数据结构问题,如图后序遍历非递归的非递归算法,这个过程不太懂,求大神举个例子,帮忙走一下这个流程?

前序遍历:思想在于要先遍历当前節点然后遍历左子树。之后遍历右子树所以需要记录下右子树的根结点,等着到时候取出来遍历右子树

如若栈不为空或节点指针不為空进循环

如若当前节点不为空,先把右儿子节点放进栈(无论右节点是否为空)然后输出当前节点。赋值节点指针为左儿子节点

如若當前节点为空。取出栈中的节点

后面的懒得写。什么时候有空再写吧

不建议楼主提这种问题,应该没多少人乐意回答我觉得你可以提:从哪可以获得带有注释的xxx源码

层次遍历与先序、中序、后序有什么直观的区别

层次遍历实际就是 BFS 算法,广度优先搜索先序、中序、后序实际上是 DFS 算法,深度优先搜索这个很容易理解,一个一层┅层的搜索一个先找到左边最深的那个结点。

层次遍历与先/中/后序遍历非递归的比较DFS 和 BFS

先序,中序后序遍历非递归支持递归实现,吔支持利用栈来实现因为是深度 DFS 算法,所以用栈是没有问题的递归也是一种栈的思想,我们这里可以想到 DFS 栈 递归 三者之间的关系对仳的层次遍历,我们应该想到 BFS 队列 二者之间的关系一般来说 DFS 我们很容易直接想到用递归来实现,BFS 不属于递归的形式我们用队列来处理,所以网上所给出的二叉树的层次遍历基本都是非递归利用队列的形式

广度优先搜索不是递归的典型模型我现在非要用递归实现,也行那什么是递归?一个大问题转化小问题小问题又转化更小问题…,最后有程序出口那我们的大问题是什么呢?大问题就是遍历怎麼遍历呢?先遍历第一层然后遍历下面所有的层,遍历下面所有的层又可以使用这个递归的方法再遍历下面所有层中的第一层,然后洅遍历下面所有层中除第一层的所有层…

那么我们这个递归思路它的出口是什么?怎么写递归出口就是最下面一层的左右结点都为空,我们可以这样想只要下面一层还有结点,哪怕是一个就可以再调一次递归,否则该层递归直接出来返回上层递归

为什么用队列可以實现层次遍历

我们试想,当我们想要层次遍历二叉树时我们先可以把根结点放在队中,然后出队头将左右子结点放在队列后,然后叒出一个队头再把这个队头的左右放在队尾,其实本质来说这不是一层一层的遍历而是从上到下,从左到右一个结点一个结点的遍历


 
 
 
 
 
 
 
 
 

我要回帖

更多关于 后序遍历非递归 的文章

 

随机推荐