递归遍历比较简单,本文主要总结非递归遍历。前序遍历前序遍历按照“根结点-左孩子-右孩子”的顺序进行访问。
对于任一结点P:
访问结点P,并将结点P入栈;
判断结点P的左孩子是否为空,若为空,则取栈顶结点并进行出栈操作,并将栈顶结点的右孩子置为当前的结点P,循环至1);若不为空,则将P的左孩子置为当前的结点P;
直到P为NULL并且栈为空,则遍历结束。
void preorder(TreeNode...
分类:
其他好文 时间:
2015-07-17 18:48:34
阅读次数:
110
【题目】输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二序列是否为第一个栈的出栈序列,假设入栈所有数字各不相等,例如:
入栈序列{1,2,3,4,5}
出栈序列1{4,5,3,2,1}
出栈序列2{4,3,5,1,2}
出栈序列1是入栈序列的其中一个弹出结果,序列2不是。【分析】
弹出序列第一个为4,所以要让栈顶元素为4时弹出,所以压入1,2,3,直到4出现在栈顶,序列1第二个为5...
分类:
其他好文 时间:
2015-06-24 18:59:46
阅读次数:
94
判断回文,简单的入栈出栈判断,其他的就是简单的回溯了。class Solution {private: vector> res; vector tempRes;public: bool isValid(string str) { stack stk; ...
分类:
其他好文 时间:
2015-06-02 21:26:50
阅读次数:
162
点击打开 基础版
最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。
希望这些能提供给初学者一些参考。
在VC++6.0下可运行,当初还写了不少注释。
/*
**********************************************************
* 3-2
* ...
分类:
其他好文 时间:
2015-05-28 12:41:29
阅读次数:
136
链表栈的基本操作包括栈的建立、求长度、取栈顶元素、入栈、出栈、判断栈是否空等具体操作。
//调试环境:DevC++
//库文件和预设定义
#include
#include
#define Stack_Length 6
#define OK 1
#define ERROR 0
typedef int SElemType;
//存储形式
typedef struct SNode
{
S...
分类:
其他好文 时间:
2015-05-22 15:14:29
阅读次数:
133
栈是在一端进行插入和删除的线性表。栈顶---允许插入、删除的这一端,栈顶的当前位置是动态变化的;不允许插入和删除的一端称为栈底,栈底是固定不变得,当表中无元素时称为空栈。对栈的常用操作有:栈 初 始 化: Init_Stack()初始条件:栈不存在操作结果:构造了一个空栈判 断 空:Empty_.....
分类:
编程语言 时间:
2015-04-06 11:23:44
阅读次数:
150
栈是 一种特殊的线性表,他只能从栈顶操作(输入和输出,删除,插入)。占位内无元素的为空栈。栈的基本操作有:进栈(栈顶插入),出栈(删除栈顶),建立栈(初始化栈),判断栈是否为满或空,取栈顶元素等运算。1.InitStrack(S) 初始化栈为空2.ClearStack(S)把栈置为空3.IsEmpt...
分类:
其他好文 时间:
2014-11-17 21:10:30
阅读次数:
132
/*
建立链栈实现括号匹配问题 创建栈,判断是否空栈
*/
#include
#include
#include
#define status int
typedef struct node
{
char ch;
node* next;
}SNode;
typedef struct
{
SNode *top;
//SNode *base;
}Stack;
//创建空栈 ...
分类:
其他好文 时间:
2014-11-02 09:24:08
阅读次数:
316
利用栈判断输入的表达式中的括号是否匹配(假设只含有左、右括号)
bool Match(char exp[],int n)
{
int i=0;
char e;
bool match=true;
SqStack *st;
InitStack(st);//初始化栈
while(i
{
if(exp[i]=='(')//当前字符为左括号,将其...
分类:
其他好文 时间:
2014-08-06 10:31:59
阅读次数:
225