数据结构的二叉链表中序遍历
2016-04-22 23:49
411 查看
数据结构的二叉链表中序遍历
// Tree.cpp : Defines the entry point for the console application. //---二叉链表存储表示--- #include "stdafx.h" #include <iostream> #include <stdlib.h> #include <malloc.h> using namespace std; #define STACK_INI_SIZE 100 #define STACKINCREMENT 10 typedef char TElemType; typedef int Status; typedef char SElemType;//数据类型 typedef struct BiTreeNode{ SElemType data; struct BiTreeNode *lchild, *rchild; }BiTreeNode,*BiTree; typedef struct{ SElemType *base; SElemType *top; int stacksize; //当前已分配空间 }SqStack; bool InitStack(SqStack &s){ s.base = (SElemType *)malloc(sizeof(SElemType)); if (!s.base) exit(OVERFLOW); s.top = s.base; s.stacksize = STACK_INI_SIZE; return true; } bool getTop(SqStack &s, SElemType e){ if (s.top == s.base)//若栈不空,则用e 返回S的栈顶元素 return false; e = *(s.top - 1); return true; } bool Push(SqStack &S, SElemType e){ if (S.top - S.base >= S.stacksize){ S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT)*sizeof(SElemType)); if (!S.base) return false; S.top = S.base + S.stacksize; S.stacksize += STACKINCREMENT; } *S.top = e; S.top++; return true; } bool Pop(SqStack &S, SElemType &e){ if (S.top == S.base) return true; else return false; } bool createTree(BiTree &T){ char ch; cin >> ch; if (ch == '0') T = NULL; else{ if (!(T = (BiTreeNode *)malloc(sizeof(BiTreeNode)))) exit(OVERFLOW); T->data = ch; createTree(T->lchild); createTree(T->rchild); } cout<<"to be Inorder"<<endl; return true; } bool InorderTraverse(BiTree &T){ //中序遍历二叉树T的非递归算法 SqStack s; InitStack(s); BiTree p; p = T; while (p || s.top != s.base){ if (p){ Push(s, p->data); p = p->lchild; } else{ Pop(s, p->data); cout<<p->data<<endl; p = p->rchild; } } return true; } void main(){ cout << "enter the data"; BiTree t; createTree(t); cout << "here:" << endl; InorderTraverse(t); }
相关文章推荐
- [C/C++]反转链表
- 文件遍历排序函数
- C#数据结构之顺序表(SeqList)实例详解
- C#实现基于链表的内存记事本实例
- Lua 学习笔记之C API 遍历 Table实现代码
- Lua教程(七):数据结构详解
- C#模拟链表数据结构的实例解析
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#遍历文件夹后上传文件夹中所有文件错误案例分析
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#中遍历Hashtable的4种方法
- C#数据结构之单链表(LinkList)实例详解
- Erlang中遍历取出某个位置的最大值代码
- 数据结构之Treap详解
- C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析
- C++实现图的邻接表存储和广度优先遍历实例分析
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C++利用静态成员或类模板构建链表的方法讲解
- 举例讲解C语言程序中对二叉树数据结构的各种遍历方式