導航:首頁 > 源碼編譯 > 全排列非遞歸演算法java

全排列非遞歸演算法java

發布時間:2023-12-28 08:33:10

① 跪求!!10分奉上!統計二叉樹結點個數的演算法 非遞歸

一般情況下,涉及二叉樹的很多操作都包含兩個方面。一方面,由於二叉樹本身的遞歸定義,因此用遞歸的思想設計其很多操作是順理成章的;另一方面,為了控制過程的深度和節約棧空間,我們有時也會考慮用非遞歸的思想設計很多關於二叉樹的操作。必須說明的是,非遞歸思想一般都需要額外棧或隊列結構的支持。下面來看一下關於統計二叉樹結點個數的非遞歸演算法設計:
1、將根結點插入隊列。
2、判斷隊列是否為空,非空執行第三步,否則執行第四步退出循環。
3、從隊列中取出一個結點,同時將取出結點的兒子結點插入隊列。此外,將計數器加1,再轉到第二步。
4、結束循環。
注意:隊列是先進先出的結構,與棧相反。
如果你根據以上仍然不能寫出完整的程序,下面的程序可作為你的參考。
int size()//返回結點數函數
{
linkqueue<node*>list;//定義元素為node*型的隊列
int sum=0;
list.push(root);
while(!list.empty())
{
node* p=list.top();//保存即將出隊的元素
list.pop();//隊列首元素出隊
if(p->lchild)//左兒子不為空,即進隊
list.push(p->lchild);
if(p->rchild)//同上
list.push(p->rchild);
sum++;//計數器增1
}
return sum;
}
要想完全把握以上程序你必須對隊列的結構有很好的理解。此外,需要說明的是,計數器是以出隊元素個數為指標進行計數的,而非進隊元素。這樣可使程序簡潔和容易理解得多。

② 關於全排列的生成演算法

個人一點見解,希望對你有所幫助。
依我之見,你的對換部分出了一點點問題。只要作如下修改即可:
1、exchange 改為:
procere exchange(l,r:integer);
var
t,len:integer;
begin
if l=r then exit;
len:=r-l+1;
len:=len div 2;
for i:=1 to len do
begin
t:=a[l+i-1];
a[l+i-1]:=a[r-i+1];
a[r-i+1]:=t;
end;
end;
2、主過程中exchange(p,n)改為exchange(i+1,n)。

閱讀全文

與全排列非遞歸演算法java相關的資料

熱點內容
土豆app下載了怎麼注冊 瀏覽:843
雲伺服器一般租多大 瀏覽:469
屏幕錄制app怎麼樣 瀏覽:686
義烏市聯DNS伺服器地址 瀏覽:669
App二級頁面怎麼做 瀏覽:956
提高pdf清晰度 瀏覽:979
伺服器網卡mac地址怎麼查 瀏覽:114
裁決之地伺服器為什麼這么卡 瀏覽:597
民生app怎麼查保險 瀏覽:467
單片機藍牙驅動代碼 瀏覽:467
php實現多選後公開 瀏覽:645
map中的值為數組的怎麼編程 瀏覽:261
加密貨幣怎麼登錄 瀏覽:1002
如何看本機伺服器實例名 瀏覽:388
變頻器加密密碼 瀏覽:796
美國銀行加密市場 瀏覽:384
我的世界伺服器如何tp玩家 瀏覽:26
app下載統計怎麼找 瀏覽:264
荔枝app怎麼看適合自己的發型 瀏覽:371
魔獸世界client文件夾 瀏覽:541