[問題] 用迴圈來寫後序式運算
看板C_and_CPP (C/C++)作者Makoto0813 (火紅的燃燒吧!妹控魂!)時間16年前 (2010/04/12 16:08)推噓2(2推 0噓 0→)留言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
04/12 17:03, 2F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章