#好吧,筆者錯誤估計樹結構中的內容了,只能再來一篇寫一下非二叉樹的模型,放心,馬上向圖前進
借助這篇文章一定要注意,再c++中傳遞已知長度的陣列,如果傳遞引用的時候(指標也是一樣)
格式如此type (&name)[m][n]
這樣才會被計算機認可,其實也正常,這與運算子的優先順序相關
的優先順序高於&,因此運算的時候如果不是指標陣列,而是陣列指標就需要按照上述的方式來描寫,否則其代表的是乙個陣列,陣列元素為指標或者引用,所以在傳遞引數的時候會報錯
quadtrees題解
#include#include#includeusing namespace std;
const int maxl = 35;
int met1[maxl][maxl], met2[maxl][maxl];
void build(int (&m)[maxl][maxl], int x, int y, int len)
else if(ch == 'f')
}int main()
return 0;
}
這道題並沒有非常**,本質上,不過是將二叉樹變種成了四叉樹罷了,筆者這回終於在遞迴的同時進行處理了,因為這邊的定義仍然採用遞迴定義,因此很自然的想到遞迴處理,即邊讀入邊處理,當然筆者的處理方式仍然較為暴力,依然把本題當作模擬題,並沒有進行多少優化
在這邊作者提出由於四分樹比較特殊,只需給出先序遍歷就能確定整棵樹,筆者在這裡不認同該說法,這邊的四分樹應該只是指如果按照題目中的輸入方式,那麼確實可以唯一確定一棵四分樹,很簡單p下面必然有四個分支,其他的都只有乙個分支,但是對於乙個一般的四叉樹,如果輸入方式未定,那麼先序遍歷不會唯一確定一棵四分樹,有前面的經驗可以猜想,一般來說,單獨的一種遍歷都難以確定唯一的樹型結構,n叉樹也是同樣符合的
#include#includeconst int len = 32;
const int maxn = 1024 + 10;
char s[maxn];//作者在這邊採用字串的方式來讀取,但是因為本題的特殊性可以通過先序遍歷確定這棵樹,因此直接讀取字元也是可以的,不過需要注意\n的影響
int buf[len][len], cnt;//因為最後是將二者結合在一起,因此只存放在乙個地方也是可以的,甚至對於記憶體的優化更好
//把字串s[p..]匯出到以(r,c)為左上角,邊長為w的緩衝區中
//2 1
//3 4
void draw(const char* s, int& p, int r, int c, int w) else if(ch == 'f') //這邊統計答案的方式非常巧妙,筆者當初並沒有想到,過程中的優化同時非常重要,儘量減少冗餘部分的出現
}} int main()
printf("there are %d black pixels.\n", cnt);
} return 0;
}
非遞迴二叉樹
由於棧和遞迴原理相同,且遞迴建立二叉樹的效率較低,所以我們可以借助棧來實現二叉樹的非遞迴建立以及遍歷。include include using namespace std template struct binarytreenode template class binarytree binary...
二叉樹 二叉樹
題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...
非二叉樹轉二叉樹的表示法
樹的儲存結構,詳細 分析在 秦玉平 馬靖善所編的資料結構 第三版 p137 142 include define max 100 typedef char elemtype 雙親表示法 typedef structptnode typedef structptree 孩子雙親表示法,若需要孩子鍊錶表...