遍历二叉树 - 基于栈的DFS】的更多相关文章

之前已经学过二叉树的DFS的遍历算法[http://www.cnblogs.com/webor2006/p/7244499.html],当时是基于递归来实现的,这次利用栈不用递归也来实现DFS的遍历,这里先只学习如何用它进行二叉树的前序遍历,具体何为前序遍历这里不多解释,可以参考之前写的博客有详细的说明,下面开始实现. 实现一个栈: 为了能让栈里面可以放任何类型的数据,则使用C++的模板来实现,先新建一个stack头文件,以便在我们需要用的文件中只要引用头文件既可: 然后再新建一个Stack类,…
上节中已经学会了如何构建一个二叉搜索数,这次来学习下树的打印-基于递归的DFS,那什么是DFS呢? 有个概念就行,而它又分为前序.中序.后序三种遍历方式,这个也是在面试中经常会被问到的,下面来具体学习下,用三种遍历方法来遍历上节中的二叉数: 前序遍历: 那对于上面的二叉数用前序遍历,遍历过程如下: 1.先遍历根节点[5] 2.再遍历左子树: 需要注意的是:遍历左右子树时仍然采用前序遍历方法.所以如下: a.先遍历根节点[3] b.再遍历左子树,由于只有一个结点则直接打印[1] c.再遍历右子树,…
之前学过利用递归实现BFS二叉树搜索(http://www.cnblogs.com/webor2006/p/7262773.html),这次学习利用队列(Queue)来实现,关于什么时BFS这里不多说了,先贴张图来直观回忆下: 实现一个队列[采用数组实现]: 这时同样采用模版技术可以往队列中去放任何类型的数据,而这个队列同样是声明在头文件中,以便在需要用到队列的地方去随时包含它,下面先来定个初步框架: /** * 利用数组来实现队列 */ template <typename T> class…
问题描述:s型遍历二叉树,或者反s型遍历二叉树 算法分析:层序遍历二叉树只需要一个队列,因为每一层都是从左往右遍历,而s型遍历二叉树就要用两个栈了,因为每次方向相反. public static void SpiralOrderTraverse(TreeNode t) { Stack<TreeNode> stack1 = new Stack<>(); Stack<TreeNode> stack2 = new Stack<>(); stack1.push(t)…
例题 中序遍历94. Binary Tree Inorder Traversal 先序遍历144. Binary Tree Preorder Traversal 后序遍历145. Binary Tree Postorder Traversal 递归栈 递归函数栈的方法很基础,写法也很简单,三种遍历方式之间只需要改变一行代码的位置即可 中序遍历 /** * Definition for a binary tree node. * struct TreeNode { * int val; * Tre…
#include <stdio.h> #define INF 32767 typedef struct MGraph{ ]; ][]; int ver_num, edge_num; }MGraph; void create_graph(MGraph *graph) { int i, j; getchar(); ; i < graph->ver_num; ++i) scanf("%c%*c",&(graph->vertexs[i])); ; i &l…
一.简述 二叉树的遍历主要是先序.中序.后序及对应的递归和非递归算法,共3x2=6种,其中后序非递归在实现上稍复杂一些.二叉树的遍历是理解和学习递归及体会栈的工作原理的绝佳工具! 此外,非递归所用的栈及相关操作是第三章实现的,但数据类型做了更改. 二.头文件 //3_1.h /** author:zhaoyu email:zhaoyu1995.com@gmail.com date:2016-6-7 note:realize my textbook <<数据结构(C语言版)>> */…
void PrintNodeAtLevel(BiTree T,int level) { // 空树或层级不合理 ) return; == level) { cout << T->data << " "; return; } // 左子树的 level - 1 级 PrintNodeAtLevel(T->leftChild, level - ); // 右子树的 level - 1 级 PrintNodeAtLevel(T->rightChild…
Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binary tree [1,null,2,3], 1 \ 2 / 3 return [1,3,2]. Note: Recursive(递归) solution is trivial, could you do it iteratively(迭代)? 思路: 解法一:用递归方法很简单, (1)如果root为空,则返回…