|
發布時間: 2014-12-13 22:12
正文摘要:題目:輸入一個整數data和一棵二元樹,從樹的根節點開始往下訪問一直到葉節點,所經過的所有節點形成一條路徑。打印出路徑的和與data相等的所有元素。 我的算法:看看對不對啊。 ... |
劉中鋒 發表于 2014-12-21 12:53 page |
|
有,是總結部分的思考題 |
劉中鋒 發表于 2014-12-20 23:13 那人寫的有問題,根本就沒賦進去 |
劉中鋒 發表于 2014-12-20 23:13 王道有嗎 |
琴魂醉 發表于 2014-12-14 19:55 你的那個算法? |
琴魂醉 發表于 2014-12-14 19:47 好好,謝謝啊, |
| 好奇怪,棧那邊賦值的i顯示不出來。 |
| 遞歸都可以轉換成非遞歸算法,所以別局限于遞歸,只是遞歸相對于非遞歸好理解,容易想。 |
本帖最后由 琴魂醉 于 2014-12-14 20:06 編輯 劉中鋒 發表于 2014-12-14 12:59 我只是說非遞歸先序比較簡單,沒說遞歸不可以 typedef struct btnode { int data,flag=0; struct btnode *lchild,*rchild; }*BiTree,btnode; void pre(BiTree bt,int datasum)//通過先序非遞歸,棧中保存的都是祖先結點 { int top=0,sum=0,i; BtTree s[],s1[],p=bt;//棧足夠大 while(p||top>0) { if(p) { s[++top]=p; if(!p->lchild&&!p->rchild)//判斷是否是葉子結點 { sum=0; for(i=top;i>0;--i)//把棧中祖先結點復制到s1中 { s1(i)=s (i); //由于[]沒法顯示,我就是用()當做[] sum+=s (i)->data; }//endfor if(sum==datasum) { for(i=1;i<top;++i)//依次打印,即可從祖先結點到當前結點 { printf("%d/t",s1 (i)->data); }//endfor }//endif }//endif p=p->lchild;//訪問左孩子 } else { p=s[top--]; p=p->rchild; } }//endwhile } |
關于我們|商務合作|小黑屋|手機版|聯系我們|服務條款|隱私保護|幫學堂| 網站地圖|院校地圖|漏洞提交|考研幫
GMT+8, 2026-5-23 09:38 , Processed in 0.069353 second(s), Total 25, Slave 25(Usage:7.25M, Links:[2]1,1_1) queries , Redis On.
Powered by Discuz!
© 2001-2017 考研 Inc.