二叉樹非遞歸后序遍歷算法

與正常的非遞歸中序遍歷算法不同于兩點:

一 ?比正常的中序遍歷算法多了對數據元素的標記。

? ? ? ?在壓數據元素入棧(標記記為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.pswp.cn/news/453301.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453301.shtml
英文地址,請注明出處:http://en.pswp.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…