树的遍历算法-只有一个变量T-递归和非递归

void PostOrderTraverse(BTNode *T)
{ //就用到了一个变量T
if(T==NULL)
return;
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c",T->data);
}

前序非递归测试代码
#include <stdio.h>
#include <malloc.h>
#define ElemType char
//顺序栈结构的定义
typedef struct
{
ElemType St[MaxSize];
int top;
}SqStack; int MaxSize=;
//二叉树结点的定义
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree; //先序建立二叉树,大话p187,教科书吧版
BiTree CreateBiTree()
{
char ch;
BiTree T;
scanf("%c",&ch);
if(ch=='#')
T=NULL;
else
{
T = (BiTree)malloc(sizeof(BiTNode));
T->data = ch;
T->lchild = CreateBiTree();
T->rchild = CreateBiTree();
}
return T;//返回根节点
} //非递归遍历算法
//简答:指向根结点指针进站,@访问该结点并且退站,退出结点的右左分别进站
//@这句话一直执行-直到栈为空即是top==-1
//主要用到工作指针变量p和top变量来操纵数据结构
void PreOrder(BiTree T)
{
BiTree p,St[]; // St[MaxSize]里面数据元素的类型和T是一样,都是一样
int top=-;
if(T==NULL) return; top++ ; St[top]=T; //根结点进站,指向根结点的指针进站 while(top>-) //while这个循环是主要的
{
p=St[top];top--;printf("%c",p->data); //栈顶的那个退掉,退站并访问该根结点
if(p->rchild!=NULL) //右孩子进站
{
top++;
St[top]=p->rchild;
} if(p->lchild!=NULL) //左孩子结点进站
{
top++;
St[top]=p->lchild;
}
}
} //原理,根结点进站;只要z站不是空的?{退站并访问该结点,然后右左孩子进站(然后去判断那个条件满足吗?)} int main()
{
BiTree T;
T = CreateBiTree();//建立
printf("先序遍历二叉树:\n");
PreOrder(T);//输出
printf("\n"); return ;
}

树的遍历算法-只有一个变量T-递归和非递归的更多相关文章
- 数据结构-树以及深度、广度优先遍历(递归和非递归,python实现)
前面我们介绍了队列.堆栈.链表,你亲自动手实践了吗?今天我们来到了树的部分,树在数据结构中是非常重要的一部分,树的应用有很多很多,树的种类也有很多很多,今天我们就先来创建一个普通的树.其他各种各样的树 ...
- 数据结构二叉树的递归与非递归遍历之java,javascript,php实现可编译(1)java
前一段时间,学习数据结构的各种算法,概念不难理解,只是被C++的指针给弄的犯糊涂,于是用java,web,javascript,分别去实现数据结构的各种算法. 二叉树的遍历,本分享只是以二叉树中的先序 ...
- 二叉树3种递归和非递归遍历(Java)
import java.util.Stack; //二叉树3种递归和非递归遍历(Java) public class Traverse { /******************一二进制树的定义*** ...
- java实现二叉树的前中后遍历(递归和非递归)
这里使用下图的二叉树作为例子: 首先建立树这个类: public class Node { private int data; private Node leftNode; private Node ...
- Java实现二叉树的先序、中序、后序、层序遍历(递归和非递归)
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易 ...
- 回溯算法 DFS深度优先搜索 (递归与非递归实现)
回溯法是一种选优搜索法(试探法),被称为通用的解题方法,这种方法适用于解一些组合数相当大的问题.通过剪枝(约束+限界)可以大幅减少解决问题的计算量(搜索量). 基本思想 将n元问题P的状态空间E表示成 ...
- C实现二叉树(模块化集成,遍历的递归与非递归实现)
C实现二叉树模块化集成 实验源码介绍(源代码的总体介绍):header.h : 头文件链栈,循环队列,二叉树的结构声明和相关函数的声明.LinkStack.c : 链栈的相关操作函数定义.Queue. ...
- C#实现(递归和非递归)高速排序和简单排序等一系列排序算法
本人由于近期工作用到了一些排序算法.就把几个简单的排序算法.想冒泡排序,选择排序,插入排序.奇偶排序和高速排序等整理了出来,代码用C#代码实现,而且通过了測试.希望能给大家提供參考. ...
- 二叉树之AVL树的平衡实现(递归与非递归)
这篇文章用来复习AVL的平衡操作,分别会介绍其旋转操作的递归与非递归实现,但是最终带有插入示例的版本会以递归呈现. 下面这张图绘制了需要旋转操作的8种情况.(我要给做这张图的兄弟一个赞)后面会给出这八 ...
随机推荐
- 在WPF中添加Windows Form控件(包括 ocx控件)
首先,需要向项目中的reference添加两个dll,一个是.NET库中的System.Windows.Forms,另外一个是WindowsFormsIntegration,它的位置一般是在C:\ ...
- 『PyTorch』第四弹_通过LeNet初识pytorch神经网络_下
『PyTorch』第四弹_通过LeNet初识pytorch神经网络_上 # Author : Hellcat # Time : 2018/2/11 import torch as t import t ...
- jquery添加类
一.addClass() 方法向被选元素添加一个或多个类. 1.对P元素添加一个intro类.<!DOCTYPE html><html><head lang=" ...
- hdu2510 爆搜+打表
符号三角形 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- android升级adt和sdk之后无法识别SDK Location的一个解决方式
我把android的adt和sdk从4.0升级到4.2,发现eclipse的android设置里面原来列出的各种api level的platform消失了,而且无法新建android工程.而且检查过了 ...
- PHP 的 HTTP 认证机制
PHP 的 HTTP 认证机制仅在 PHP 以 Apache 模块方式运行时才有效,因此该功能不适用于 CGI 版本.在 Apache 模块的 PHP 脚本中,可以用 header()函数来向客户端浏 ...
- python daal test
import os import sys from daal.algorithms import low_order_moments from daal.data_management import ...
- Swift网络封装库Moya中文手册之Targets
Targets 使用Moya,我们首先需要定义一个target - 这通常是继承 TargetType 协议的 枚举 变量.接下来,你的app只需要处理这些targets,也就是一些你希望调用API完 ...
- ansible 循环register
在有循环的task中使用register,register保存的是一个列表,整个属性为results results 是一个单个循环返回的结果的列表 - debug: msg="{{ ite ...
- 开源项目ScriptGate,Delphi与JavaScript相互调用的神器
ScriptGate是一个实现TWebBrowser上的JavaScript和Delphi代码相互调用的库,具体在这里:https://bitbucket.org/freeonterminate/sc ...