java實(shí)現(xiàn)簡(jiǎn)單的二叉樹(shù) 層序遍歷二叉樹(shù)與經(jīng)典遞歸遍歷的性能差距多大?
層序遍歷二叉樹(shù)與經(jīng)典遞歸遍歷的性能差距多大?遞歸遍歷二叉樹(shù)程序很短,易懂。在性能方面,遞歸速度快,占用內(nèi)存少。但遞歸程序包含深度優(yōu)先和廣度優(yōu)先的遍歷方法,比較復(fù)雜,容易出錯(cuò)。現(xiàn)在CPU速度非???,堆棧
層序遍歷二叉樹(shù)與經(jīng)典遞歸遍歷的性能差距多大?
遞歸遍歷二叉樹(shù)程序很短,易懂。在性能方面,遞歸速度快,占用內(nèi)存少。但遞歸程序包含深度優(yōu)先和廣度優(yōu)先的遍歷方法,比較復(fù)雜,容易出錯(cuò)。
現(xiàn)在CPU速度非??欤褩?臻g非常大。性能差異可以忽略不計(jì)。
或遞歸遍歷二叉樹(shù)程序可讀性更好。
二叉樹(shù)的層次遍歷?
設(shè)計(jì)一個(gè)遍歷二叉樹(shù)的算法(從左到右訪(fǎng)問(wèn)同一層)。思路:用隊(duì)列保存當(dāng)前節(jié)點(diǎn)的左右子節(jié)點(diǎn),實(shí)現(xiàn)序列遍歷。
Void hierarchy BiTree(BiTree root){
linkqueue*q//保存當(dāng)前節(jié)點(diǎn)左右子節(jié)點(diǎn)的隊(duì)列
initqueue(q)//初始化隊(duì)列
if(root==null)return//樹(shù)為空時(shí)返回
binode*P=root//將樹(shù)根臨時(shí)保存到指針P
visit(P->data)//訪(fǎng)問(wèn)根節(jié)點(diǎn)
if(P->lchild)enqueue(Q,P->lchild)//如果有左子級(jí),左子級(jí)進(jìn)入隊(duì)列
if(P->rchild)enqueue(Q,P->rchild)//如果有右子級(jí),右子級(jí)進(jìn)入隊(duì)列
while(!Queueempty(q))//如果隊(duì)列不為空,則序列遍歷{dequeue(q,P)//出隊(duì)列
visit(P->data)//訪(fǎng)問(wèn)當(dāng)前節(jié)點(diǎn)
if(P->lchild)enqueue(q,P->lchild)//如果有左子級(jí),則左子級(jí)進(jìn)入隊(duì)列
if(P->rchild)enqueue(q,P->rchild)//如果有左子級(jí)右子,右子進(jìn)入隊(duì)列
}
destroy queue(q)//釋放隊(duì)列空間
return
這很詳細(xì)!你能理解的!加油!