亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

二叉樹非遞歸的后序遍歷為什么不對呢

二叉樹非遞歸的后序遍歷為什么不對呢

C++
lapitaya 2019-11-12 15:38:04
已經看了好長時間了,還是不知道為什么,求指點輸入abd..e..cf..g..輸出如下所示,是循環的,知道大概是在判斷p->right == pre處出的問題,但是就是想不通為什么此處條件不正確,求大神解答debfgca 進入1?b?stack?a 進入1?d?stack?ba 進入1?NULL?stack?dba getTop:d ino:1? p->right:NULL?d進入2?pre:d?stack?ba getTop:b ino:0 進入3?e 進入1?NULL?stack?eba getTop:e ino:0 ?p->right:NULL?e進入2?pre:e?stack?ba ?getTop:b ?ino:0 ?進入3?e ?進入1?NULL?stack?eba ?getTop:e ?ino:0 ??p->right:NULL?e進入2?pre:e?stack?ba#include?<iostream>#include<stdlib.h>using?namespace?std;#define?MAXSIZE?50typedef?struct?TNode{ char?data; struct?TNode?*left,?*right;}TNode,?*bitTree;typedef?TNode?ElemType;typedef?struct{????ElemType?data[MAXSIZE];????int?top;}?Sqstack;void?InitStack(Sqstack?&S);bool?isEmpty(Sqstack?S);void?getTop(Sqstack?S,?ElemType?&e);void?push(Sqstack?&S,?ElemType?x);void?pop(Sqstack?&S,?ElemType?&x);void?printStack(Sqstack?S);void?createTree(bitTree?&T);void?preOrder(bitTree?T);void?inOrder(bitTree?T);void?postOrder(bitTree?T);void?inOrderStack(bitTree?T,?Sqstack?S);void?preOrderStack(bitTree?T,?Sqstack?S);void?postOrderStack(bitTree?T,?Sqstack?S);int?main()?{????bitTree?T;????createTree(T); //輸入?abd..e..cf..g..????postOrder(T);????cout?<<?endl;????Sqstack?S;????InitStack(S);????//后序遍歷非遞歸算法????postOrderStack(T,?S);????}//后序遍歷非遞歸void?postOrderStack(bitTree?T,?Sqstack?S){????TNode?*p?=?T,?*pre?=?NULL;????ElemType?x;????while(p?||?!isEmpty(S)){????????if(p){????????????cout?<<?"進入1?";????????????push(S,?*p);????????????p?=?p->left;????????????if(p)?cout?<<?p->data?<<?"?";????????????else?cout?<<?"NULL"?<<?"?";????????????cout?<<?"stack?";????????????printStack(S);????????}????????else{????????????getTop(S,?x);????????????p?=?&x;????????????cout?<<?"getTop:"?<<?x.data?<<?endl;????????????cout?<<?"ino:"?<<?(x.right?==?pre)?<<?endl;????????????if(!p->right?||?p->right?==?pre){//右邊為空或右邊已經遍歷過????????????????pop(S,?*p);????????????????cout?<<?p->data;????????????????pre?=?p;????????????????p?=?NULL;????????????????cout?<<?"進入2?";????????????????cout?<<?"pre:"?<<?pre->data;????????????????//if(p->right)?cout?<<?"?p->right:"?<<?p->right->data;????????????????//else?cout?<<?"?p->right:NULL?";????????????????cout?<<?"?stack?";????????????????printStack(S);????????????}????????????else{????????????????cout?<<?"進入3?";????????????????p?=?p->right;????????????????if(p)?cout?<<?p->data?<<?endl;????????????????else?cout?<<?"NULL"?<<?endl;????????????}????????}????}????}void?createTree(bitTree?&T){????//cout?<<?"init"?<<?endl;????//以遞歸前序遍歷方式創建,空用.表示????TNode?s;????char?data;????data?=?getchar();????if(data?!=?'.'){????????T?=?(TNode*)malloc(sizeof(TNode));????????T->data?=?data;????????T->left?=?NULL;????????T->right?=?NULL;????????createTree(T->left);????????createTree(T->right);????}????else{????????T?=?NULL;????}}void?postOrder(bitTree?T){????if(T){????????postOrder(T->left);????????postOrder(T->right);????????cout?<<?T->data;????}}void?printStack(Sqstack?S){ for(int?i?=?S.top;?i?>?-1;?i--){ cout?<<?S.data[i].data; } cout?<<?endl;}void?InitStack(Sqstack?&S){????S.top?=?-1;}bool?isEmpty(Sqstack?S){????if(S.top?==?-1)?return?1;????return?0;}void?getTop(Sqstack?S,?ElemType?&e){????e?=?S.data[S.top];}void?push(Sqstack?&S,?ElemType?x){????if(S.top?!=?MAXSIZE-1){????????S.data[++S.top]?=?x;????}}void?pop(Sqstack?&S,?ElemType?&x){????if(S.top?!=?-1){????????x?=?S.data[S.top--];????}}
查看完整描述

2 回答

?
on_0

TA貢獻1條經驗 獲得超0個贊

? ? ? .......

查看完整回答
反對 回復 2019-11-12
  • 2 回答
  • 0 關注
  • 811 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號