[問題] 用迴圈來寫後序式運算

看板C_and_CPP (C/C++)作者 (火紅的燃燒吧!妹控魂!)時間16年前 (2010/04/12 16:08), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串1/2 (看更多)
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 課本的習題,試用迴圈來完成二元樹的後序式走訪 #define MAX_SIZE 100; typedef struct bintree *tree_pointer; typedef struct bintree{ int data; tree_pointer leftchild; tree_pointer rightchild; }; 大致上會用到的全域變數是這些 這裡列出前序式的迴圈寫法或許可供參考如下: void pre_order(tree_pointer node) { int top=-1; tree_pointer stack[MAX_SIZE]; for(;;){ for(;node;node=node->leftchild){ if(node) printf("%d",node->data); add(&top,node);} node=delete(&top); if(!node)break; node=node->rightchild; } } 爬過板上雖有相關的問題卻沒看到回答,這題我生了一個下午了還是出不來 在知識家看到有人提到可以用堆疊和佇列來做,只是他提的演算法 要改成程式碼還是霧煞煞@@,節錄演算法內容供參考... # 如果node(樹根)是NULL, 那表示這樹沒東西. 直接return就行 # 把node給push進queue裡 # 用個do…while迴圈(用for或while也行). do…while迴圈從這開始 # 把queue裡的一個數pop出並存入node裡 # 如果node的right_c不是NULL的話就把node的right_c給push進queue裡. # 如果node的left_c不是NULL的話就把node的left_c給push進queue裡. # 把node給push進stack裡 # do…while迴圈由此結束. 此迴圈要繼續執行直到queue裡沒東西了. 所以while裡的條件是要檢查queue是否沒東西了. # 用個迴圈把stack裡的東西一一pop並顯示出來 對不起可以求程式碼嗎... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.74.232.161

04/12 16:54, , 1F
哪裡不懂呢? 他的演算法講的不少阿
04/12 16:54, 1F

04/12 17:03, , 2F
求程式碼要去codejob喔
04/12 17:03, 2F
文章代碼(AID): #1BmjKPb6 (C_and_CPP)
文章代碼(AID): #1BmjKPb6 (C_and_CPP)