后续遍历要保证根结点在左孩子和右孩子访问之后才能访问,因此对于任一结点P,先将其入栈。如果P不存在左孩子和右孩子,则可以直接访问它;或者P存在左孩子或者右孩子,但是其左孩子和右孩子都已被访问过了,则同样可以直接访问该结点。若非上述两种情况,则将P的右孩子和左孩子依次入栈,这样就保证了每次取栈顶元素的 ...
分类:
编程语言 时间:
2019-02-06 12:00:30
阅读次数:
179
遍历即将树的所有结点访问且仅访问一次。 按照根节点位置的不同分为前序遍历,中序遍历,后序遍历。 一:前序遍历 1. 访问根结点; 2. 遍历左子树; 3. 遍历右子树。 二:中序遍历 1. 遍历左子树; 2. 访问根结点; 3. 遍历右子树。 三:后续遍历 1. 遍历左子树; 2. 遍历右子树; 3 ...
分类:
其他好文 时间:
2019-01-18 15:36:18
阅读次数:
150
[前文] 二叉树的非递归遍历有 先序遍历、中序遍历 、后续遍历 和 层序遍历。 非递归算法实现的基本思路:使用堆栈。而层序遍历的实现:使用队列。 如下图所示的二叉树: 前序遍历顺序为:ABCDE (先访问根节点,然后先序遍历其左子树,最后先序遍历其右子树) 中序遍历顺序为:CBDAE (先中序遍历其 ...
分类:
其他好文 时间:
2018-11-17 19:27:49
阅读次数:
206
[前文] 二叉树的递归遍历包括 先序遍历、中序遍历 和 后续遍历。 如下图所示的二叉树: 前序遍历顺序为:ABCDE (先访问根节点,然后先序遍历其左子树,最后先序遍历其右子树) 中序遍历顺序为:CBDAE (先中序遍历其左子树,然后访问很节点,最后中序遍历其右子树) 后续遍历顺序为:CDBEA ( ...
分类:
其他好文 时间:
2018-11-17 16:05:16
阅读次数:
157
1、二叉树的遍历 遍历:迭代所有元素一遍。 树的遍历:对树中所有的元素不重复的访问一遍,也成扫描 广度优先遍历:层序遍历 深度优先遍历:前序、中序、后续遍历。 遍历序列:将树中所有元素遍历一遍后,得到的元素序列。将层次结构转换成了线性结构。 2、层序遍历 按照数的层次,从第一层开始,自左向右遍历元素 ...
分类:
编程语言 时间:
2018-11-13 00:18:50
阅读次数:
302
后续遍历关键在于,当节点的 右子树存在且被访问后 或者是 右子树为空 才能访问自身。 在遍历过程中,先将节点从的左孩子到最左节点压栈, 设置标志变量 flag 来判断是否访问过左孩子, pre指针来指向先前访问过的节点。 所有左孩子压栈后, 最后一个节点的左孩子为空,已被访问p = NULL , 令 ...
分类:
编程语言 时间:
2018-10-24 17:51:50
阅读次数:
194
测试A卷 1. 对 2. 需求完成时开始系统测试用例设计 3. 每一行6(10 5+1)个元素,[10,9]与[18,9]之间差8行,[10,9]距离[10,5]间隔4个元素,总共间隔(8 x 6 +4)x4(占4个存储单元) 1000 + 208 = 1028 4. 死循环证明存在动态语义错误 5 ...
分类:
其他好文 时间:
2018-10-19 18:20:15
阅读次数:
187
1、 采用传统的递归 (O(n)的空间复杂度) 2、采用 Stack + 迭代的方式 (O(n)的空间复杂度) ①、先序遍历 ②、中序遍历 优化 ③、后续遍历 a、采用 Stack 进行压栈操作,同时采用一个 Map 记录该节点的右孩子是否被访问过 b、采用一个指针记录当前右孩子是否访问过 c、前序 ...
分类:
其他好文 时间:
2018-10-05 14:02:10
阅读次数:
139
一、题目 1、审题 2、分析 给出一棵二叉树,求从根到叶节点的所有节点值和为 sum 的路径的所有节点集合。 二、解答 1、思路: 方法一、 采用递归。 深度优先遍历求出所有从根到叶节点的路径,将和为 sum 的进行记录。 方法二、 采用后续遍历的迭代方法,进行记录和为 sum 的所有路径。 注意: ...
分类:
其他好文 时间:
2018-10-04 16:39:36
阅读次数:
127