二叉树非递归后序遍历算法

与正常的非递归中序遍历算法不同于两点:

一  比正常的中序遍历算法多了对数据元素的标记。

       在压数据元素入栈(标记记为0,用来表示访问了其左子树)时标记,

      还有访问完左子树利用gettop()获取双亲通过p=p->rchild进一步访问右子树(标记为1,表示访问了该数据元素的

      右子树)时标记。

二   在访问完左子树时,中序遍历会pop出该元素,利用pop出数据访问右子树。而后序遍历在遍历完右子树之后才会pop

       出该元素,并访问其数据,中间的过程是利用getTop函数实现的

void postOrderNoRe(BiTree T) //后续遍历非递归算法
{BiTree p;Stack *st;initstack(st);p=T;int Tag[20];      //栈,用于标识从左(0)或右(1)返回 while (p!=NULL || !isempty(st)){while (p!=NULL){push(st,p);Tag[st->top]=0;p=p->lchild;}while (!isempty(st)&&Tag[st->top]==1){//注意这里使用的是while,也就是说不停循环把栈里连续标记为1的节点都输出来//通过上面的函数访问完右子树之后才会访问该节点的数据//所以这个输出函数必须放在这里,下面的函数用来由访问左子树转//为访问其右子树。而上面的函数用来判断右子树是否访问结束p=pop(st);cout<<p->data<<"  ";}if (!isempty(st)){p=gettop(st);p=p->rchild;Tag[st->top]=1;   //设置标记右子树已经访问 }else break;}
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL*Plus命令

SQL*Plus命令 前言 一&#xff1a;SQL*Plus 与数据库的交互 二&#xff1a;设置SQL* Plus的运行环境 二 - 1 &#xff1a;SET命令概述 二 - 2 &#xff1a;使用SET命令设置运行环境 二 - 2 ____1&#xff1a;Pagesize 变量 1 SYSorcl> show pagesize2 pages…

redis-day1

1 Redis 概述 REmote DIctionary Server(Redis)是一个基于key-value键值对的持久化数据库存储系统。redis和大名鼎鼎的Memcached缓存服务软件很像&#xff0c;但是Redis支持的数据存储类型比Memcached更丰富&#xff0c;包括strings&#xff08;字符串&#xff09;、lists&…

C语言数码管是共阴共阳程序,C语言实现共阴极数码管操作

共阴极或者共阳极数码管&#xff0c;因为其需要电流大&#xff0c;而一般51输出电流低&#xff0c;需要锁存器。买的开发板使用的共阴极数码管。至于其构造&#xff0c;找个相关方面的书看看&#xff0c;这里主要是对做好的电路板进行编程。刚开始的时候&#xff0c;感觉在数码…

数据库主要特点

(1)实现数据共享。数据共享包含所有用户可同时存取数据库中的数据&#xff0c;也包括用户可以用各种方式通过接口使用数据库&#xff0c;并提供数据共享。 (2)减少数据的冗余度。同文件系统相比&#xff0c;由于数据库实现了数据共享&#xff0c;从而避免了用户各自建立应用文…

百度与华为全面战略合作 人工智能手机真的要来了

视频加载中...12月21日百度和华为在北京宣布达成全面战略合作。这次合作内容主要包括三点&#xff0c;首先是在语音、语义、视觉和VR上的自然交互&#xff0c;这是百度为华为手机AI赋能的基础层。第二是基于华为HiAI平台和百度PaddlePaddle深度学习框架&#xff0c;共建人工智能…

JavaScript数据类型

一、JavaScript数据类型主要分为原始类型和引用数据类型。 原始类型包括(不可拆分的东西)&#xff1a;Number、String、Boolean、Null、Undefined。引用数据类型包括&#xff1a;Object&#xff08;Array&#xff0c;Date&#xff0c;RegExp&#xff0c;Function&#xff09;ty…

funcode拼图游戏c语言程序,同求funcode平台下拼图游戏的C语言代码

做了好几天&#xff0c;写了好多回就是不对&#xff0c;彻底崩溃。。#include "CommonAPI.h"//#include "LessonX.h"#include#define BLOCK_COUNT 4int g_iGameState;intg_iBlockState[BLOCK_COUNT][BLOCK_COUNT];charg_szBlockName[BLOCK_COUNT*BLOCK_COU…

什么是透明传输

透明传输是指不管所传数据是什么样的比特组合&#xff0c;都应当能够在链路上传送。当所传数据中的比特组合恰巧与某一个控制信息完全一样时&#xff0c;就必须采取适当的措施&#xff0c;使收方不会将这样的数据误认为是某种控制信息。这样才能保证数据链路层的传输是透明的。…

Android 秒级编译FreeLine

项目地址&#xff1a;FreeLine FreeLine官网: FreeLine 1. 安装FreeLine插件 File->Settings->Plugins, 搜索输入FreeLine Plugin, 查找到后进行安装并重启Android Studio。 图1.png安装好之后&#xff0c;在工具栏就会出一个图标 图2.png2. 配置gradle 根目录build.gr…

JS实现大整数乘法(性能优化、正负整数)

本方法的思路为&#xff1a; 一&#xff1a;检查了输入的合法性&#xff08;非空&#xff0c;无非法字符&#xff09; 二&#xff1a;检查输入是否可以进行简单计算&#xff08;一个数为 0&#xff0c;1&#xff0c;1&#xff0c;-1&#xff09; 三&#xff1a;去掉输入最前面可…

c语言中- gt he,C语言中deta,fabs,lt;stdlib.hgt;,lt;stdio.hgt;分别是什么意思

fabs 编辑本段C语言数学函数:fabs 函数简介  原型&#xff1a;在TC中原型是extern float fabs(float x);&#xff0c;在VC6.0中原型是double fabs( double x );。   用法&#xff1a;#include   功能&#xff1a;求浮点数x的绝对值   说明&#xff1a;计算|x|, 当x不为…

物理层

目的&#xff1a; 物理层要尽可能地屏蔽掉物理设备和传输媒体&#xff0c;通信手段的不同&#xff0c;使数据链路层感觉不到这些差异&#xff0c;只考虑完成本层的协议和服务。 给其服务用户&#xff08;数据链路层&#xff09;在一条物理的传输媒体上传送和接收比特流…

C语言中的二级指针(双指针)

二级指针又叫双指针。C语言中不存在引用&#xff0c;所以当你试图改变一个指针的值的时候必须使用二级指针。C中可以使用引用类型来实现。 下面讲解C中的二级指针的使用方法。 例如我们使用指针来交换两个整型变量的值。 错误代码如下&#xff1a; 一级指针 [cpp] view pla…

测试环境服务器硬盘塞满问题排查

项目中出现的问题 某天下午测试环境服务器出现tab无法补全命令&#xff0c;给出的提示大概意思就是说,无可用空间无法创建临时文件&#xff0c;不过这次跟上次出现的问题比较像&#xff0c;上次服务器出现的问题&#xff0c;因此楼主判断可能是服务器数据盘被占满&#xff0c;果…

alpine_glibc 构建sun jdk 8的docker镜像

2019独角兽企业重金招聘Python工程师标准>>> 构建系统基础镜像 alpine glibc 的Dockerfile内容如下&#xff1a; alpine:3.6 MAINTAINER tongqiang<tongqiangyingmail.com># Here we install GNU libc (aka glibc) and set C.UTF-8 locale as default.ENV ALP…

单工 半双工 全双工

1 单工 单工就是指A只能发信号&#xff0c;而B只能接收信号&#xff0c;通信是单向的&#xff0c;就象灯塔之于航船——灯塔发出光信号而航船只能接收信号以确保自己行驶在正确的航线上。 2 半双工 半双工就是指A能发信号给B&#xff0c;B也能发信号给A&#xff0c;但这两…

c语言两个循环的ys,c语言编程:从键盘输入两个数,求它们的最小公倍数

满意答案flywisdom2019.06.20采纳率&#xff1a;44% 等级&#xff1a;9已帮助&#xff1a;1064人main(){int p,r,n,m,temp;printf("Please enter 2 numbers n,m:");scanf("%d,%d",&n,&m);//输入两个正整数.if(n{tempn;nm;mtemp;}pn*m;//P是原来…

每日微软面试题

每日微软面试题——day 1 <以下微软面试题全来自网络> <以下答案与分析纯属个人观点&#xff0c;不足之处&#xff0c;还望不吝指出^_^> 题&#xff1a;.编写反转字符串的程序&#xff0c;要求优化速度、优化空间。 分析&#xff1a;构建两个迭代器p 和 q &…

第八章 多态

第八章 多态1. 重写一个类通过继承来产生一个新类&#xff0c;继承了父类的所有变量和方法&#xff0c;在继承这些变量和方法的时候&#xff0c;子类也可以具有自己独特的特征和行为。Public class fruit{Public void print(){System.out.println(“这是超类的方法”);}}Clas…

Ionic Angular自动捕获错误 配置Angular2.x +

配置app.module.ts import { Pro } from ionic/pro;// These are the imports required for the code below, // feel free to merge into existing imports. import { Injectable, Injector } from angular/core; import { IonicErrorHandler } from ionic-angular;const Ioni…