BTree非递归
preorder
void PreOrder(BTNode* b)
{
BTNode* p = b;
SqStack* st;
InitStack(st);
if (b != NULL)
{
Push(st, p);
while (!StackEmpty(st))
{
Pop(st,p);
printf("%c", p->data);
if (p->rchild != NULL)
{
Push(st,p->rchild);
}
if (p->lchild != NULL)
{
Push(st,p->lchild);
}
}
printf("\n");
}
DestroyStack(st);
}
void PreOrder1(BTNode* b)
{
BTNode* p = b;
SqStack* st;
InitStack(st);
while(p != NULL || !StackEmpty(st))
{
while (p != NULL)
{
printf("%c", p->data);
Push(st,p);
p = p->lchild;
}
if (!StackEmpty(st))
{
Pop(st, p);
p = p->rchild;
}
}
printf("\n");
DestroyStack(st);
}
inorder
void InOrder(BTNode* b)
{
BTNode* p = b;
SqStack* st;
InitStack(st); while (p != NULL || !StackEmpty(st))
{
while (p != NULL)
{
Push(st,p);
p = p->lchild;
}
if (!StackEmpty(st))
{
Pop(st, p);
printf("%c", p->data);
p = p->rchild;
}
}
printf("\n");
DestroyStack(st);
}
postorder
void PostOrder(BTNode* b)
{
BTNode* p = b;
BTNode* r;
SqStack* st;
InitStack(st);
bool flag;
do
{
while (p != NULL)
{
Push(st,p);
p = p->lchild;
}
r = NULL;
flag= true;
while (!StackEmpty(st) && flag)
{
GetTop(st, p);
if (r == NULL&&p->rchild==NULL)
{
printf("%c", p->data);
Pop(st, p);
r = (BTNode*)malloc(sizeof(BTNode));
r->data = p->data;
}
else if ((r != NULL&&p->rchild!=NULL)&&r->data==p->rchild->data)
{
printf("%c", p->data);
Pop(st, p);
r = (BTNode*)malloc(sizeof(BTNode));
r->data = p->data;
}
else
{
p = p->rchild;
flag = false;
}
}
} while (!StackEmpty(st));
printf("\n");
DestroyStack(st);
}
层次遍历
typedef struct {
BTNode data[MAXSIZE];
int front, rear;
}SqQueue;
void LevelOrder(BTNode* b)
{
SqQueue* q;
InitQueue(q);
BTNode* p = b;
enQueue(q,p);
while (!QueueEmpty(q))
{
deQueue(q, p);
printf("%c", p->data);
if (p->lchild != NULL)
enQueue(q, p->lchild);
if (p->rchild != NULL)
enQueue(q, p->rchild);
}
}
利用层次遍历输出从根结点到每个叶子结点的逆路径
typedef struct {
BTNode* pt;
int parent;
}NodeType;
typedef struct {
NodeType data[MAXSIZE];
int front, rear;
}QuType
void AllPath2(BTNode* b)
{
int k;
BTNode* p;
QuType* qu;
InitQueue2(qu);
NodeType* qelem = (NodeType*)malloc(sizeof(NodeType));
qelem->pt = b;
qelem->parent = -1;
enQueue2(qu,qelem);
while (!QueueEmpty2(qu))
{
deQueue2(qu, qelem);
p = qelem->pt;
if (p->lchild == NULL && p->rchild == NULL)
{
k = qu->front;
while (qu->data[k].parent != -1)
{
printf("%c", qu->data[k].pt->data);
k = qu->data[k].parent;
}
printf("%c\n", qu->data[k].pt->data); }
if (p->lchild != NULL)
{
qelem->pt = p->lchild;
qelem->parent = qu->front;
enQueue2(qu, qelem);
}
if (p->rchild != NULL)
{
qelem->pt = p->rchild;
qelem->parent = qu->front;
enQueue2(qu, qelem);
}
}
}
BTree非递归的更多相关文章
- java数据结构之二叉树遍历的非递归实现
算法概述递归算法简洁明了.可读性好,但与非递归算法相比要消耗更多的时间和存储空间.为提高效率,我们可采用一种非递归的二叉树遍历算法.非递归的实现要借助栈来实现,因为堆栈的先进后出的结构和递归很相似.对 ...
- C++实现二叉树(建树,前序,中序,后序)递归和非递归实现
#include<iostream> #include<string.h> #include<stack> using namespace std; typedef ...
- 算法笔记_013:汉诺塔问题(Java递归法和非递归法)
目录 1 问题描述 2 解决方案 2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...
- C语言递归,非递归实现翻转链表
翻转链表作为,链表的常用操作,也是面试常遇到的. 分析非递归分析: 非递归用的小技巧比较多,很容易出错. 递归分析比较简单,在代码里面 代码: #include<stdio.h> #inc ...
- 非递归创建二叉树( C++队列 )
非递归按照 层序 创建二叉树,利用 队列(即可先进先出特点)存放已访问的结点元素的地址. 初始化:front=rear= -1: 每储存一个结点元素 rear+1 ,利用 rear%2==0 来使 f ...
- python非递归全排列
刚刚开始学习python,按照廖雪峰的网站看的,当前看到了函数这一节.结合数组操作,写了个非递归的全排列生成.原理是插入法,也就是在一个有n个元素的已有排列中,后加入的元素,依次在前,中,后的每一个位 ...
- Best Coder Round#25 1003 树的非递归访问
虽然官方解释是这题目里的树看作无向无环图,从答案来看还是在“以1作为根节点”这一前提下进行的,这棵树搭建好以后,从叶节点开始访问,一直推到根节点即可——很像动态规划的“自底向上”. 但这棵树的搭建堪忧 ...
- 排序算法练习--JAVA(插入、直接选择、冒泡、快速排序、非递归快速排序)
排序算法是数据结构中的经典算法知识点,也是笔试面试中经常考察的问题,平常学的不扎实笔试时候容易出洋相,回来恶补,尤其是碰到递归很可能被问到怎么用非递归实现... package sort; impor ...
- C语言实现 二分查找数组中的Key值(递归和非递归)
基本问题:使用二分查找的方式,对数组内的值进行匹配,如果成功,返回其下标,否则返回 -1.请使用递归和非递归两种方法说明. 非递归代码如下: #include <stdio.h> int ...
随机推荐
- idea修改web项目的访问路径
转 新建好了项目发现项目只能以localhost:8080这样的访问路径访问到主页,也就是index.jsp 那么之前我用eclipse新建的项目都是localhost:8080/xxx(项目名称)来 ...
- svg教程
实例 <html> <body> <h1>My first SVG</h1> <svg style="border: 1px solid ...
- 76.Python中F表达式详解
F表达式是用来优化ORM操作数据库的. 举个例子:我们做口罩的公司要将所有员工的薪水增加2000元,如果按照正常的流程,应该是先从数据库中提取所有的员工的工资到Python内存中,然后使用Python ...
- id3算法python实现
import numpy as npimport operator def createDataSet(): dataSet = [ [1,1,'yes'], [1,1,'yes'], [1,0,'n ...
- 基于python的小波阈值去噪算法
https://blog.csdn.net/alwaystry/article/details/52756051 发表于 2018-01-10 16:32:17 嵌入式设计应用 +关注 小波图像去噪原 ...
- 18 12 4 SQL 的基本 语法
数据库的基本语法 -- 数据库的操作 -- 链接数据库 mysql -uroot -p mysql -uroot -pmysql -- 退出数据库 exit/quit/ctrl+d -- sql语句最 ...
- HTML5新标签使用及CSS选择器(伪类)
这些标签能够让搜索引擎更直接的解析页面内容. <header></header>语义:文档或者页面的头部 <nav></nav>语义:导航这两者不是组合 ...
- share团队冲刺10
团队冲刺第十天 昨天:完善代码,美化界面 今天:整合全部代码,基本完成作品 问题:无
- 2014_csu选拔1_B
Description Here is no naked girl nor naked runners, but a naked problem: you are to find the K-th s ...
- zabbix中文乱码解决
问题现象: zabbix字体修改成中文后监控显示乱码 原因: 该问题是由于zabbix默认使用的是“DejaVuSans.ttf”(zabbix3.2.7默认使用的是“graphfont.ttf”), ...