C++非遞歸建立二叉樹(shù)實(shí)例
本文實(shí)例講述了C++非遞歸建立二叉樹(shù)的方法。分享給大家供大家參考。具體分析如下:
思路:
設(shè)置一個(gè)標(biāo)記變量flag并初始化為1. flag = 1表示現(xiàn)在需要?jiǎng)?chuàng)建當(dāng)前結(jié)點(diǎn)的左孩子,2表示需要?jiǎng)?chuàng)建右孩子,3則表示當(dāng)前結(jié)點(diǎn)的左右孩子都已經(jīng)創(chuàng)建完畢,需要執(zhí)行出棧操作,直到當(dāng)前結(jié)點(diǎn)不是父結(jié)點(diǎn)的右孩子為止。
以先序創(chuàng)建如圖所示二杈樹(shù):

實(shí)現(xiàn)代碼:
PBTree create()
{
char ch[20];
scanf("%s",ch);
int len = strlen(ch);
PBTree stack[20];
/* 用來(lái)存儲(chǔ)結(jié)點(diǎn)地址的棧 */
int top = 0;
/* 棧頂指針 */
int flag = 1;
/* 1表示現(xiàn)在需要?jiǎng)?chuàng)建左孩子,
2表示需要?jiǎng)?chuàng)建右孩子,
3表示左右孩子都已經(jīng)創(chuàng)建完成 */
int i = 0;
PBTree temp;
PBTree root = (PBTree)malloc(sizeof(BTree));
root->data = ch[i++];
root->lchild = NULL;
root->rchild = NULL;
stack[top ++] = root;
while(i < len)
{
PBTree pNew = NULL;
if(1 == flag) /* 創(chuàng)建左孩子 */
{
if('#' == ch[i])
flag = 2;
else
{
pNew = (PBTree)malloc(sizeof(BTree));
pNew->lchild = NULL;
pNew->rchild = NULL;
pNew->data = ch[i];
temp = stack[top - 1];
temp->lchild = pNew;
stack[top++] = pNew;
flag = 1;
}
}
else if(2 == flag)
/* 創(chuàng)建右孩子 */
{
if('#' == ch[i])
flag = 3;
else
{
pNew = (PBTree)malloc(sizeof(BTree));
pNew->lchild = NULL;
pNew->rchild = NULL;
pNew->data = ch[i];
temp = stack[top - 1];
temp->rchild = pNew;
stack[top++] = pNew;
flag = 1;
}
}
else
/* 左右孩子已經(jīng)創(chuàng)建完成,需要出棧*/
{
temp = stack[--top];
while(top > 1 && stack[top - 1]->rchild == temp)
--top;
flag = 2;
--i;
}
++i;
}
return root;
}
希望本文所述對(duì)大家的C++程序設(shè)計(jì)有所幫助。
- C++ 非遞歸實(shí)現(xiàn)二叉樹(shù)的前中后序遍歷
- C++ 數(shù)據(jù)結(jié)構(gòu)二叉樹(shù)(前序/中序/后序遞歸、非遞歸遍歷)
- C++使用遞歸和非遞歸算法實(shí)現(xiàn)的二叉樹(shù)葉子節(jié)點(diǎn)個(gè)數(shù)計(jì)算方法
- C++基于遞歸和非遞歸算法判定兩個(gè)二叉樹(shù)結(jié)構(gòu)是否完全相同(結(jié)構(gòu)和數(shù)據(jù)都相同)
- C++基于遞歸和非遞歸算法求二叉樹(shù)鏡像的方法
- C++非遞歸隊(duì)列實(shí)現(xiàn)二叉樹(shù)的廣度優(yōu)先遍歷
- C++二叉樹(shù)的前序中序后序非遞歸實(shí)現(xiàn)方法詳細(xì)講解
相關(guān)文章
C++實(shí)現(xiàn)猜數(shù)小游戲的實(shí)現(xiàn)
這篇文章主要介紹了C++實(shí)現(xiàn)猜數(shù)小游戲的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
c++中臨時(shí)變量不能作為非const的引用參數(shù)的方法
下面小編就為大家?guī)?lái)一篇c++中臨時(shí)變量不能作為非const的引用參數(shù)的方法。小編覺(jué)得挺不錯(cuò)的現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
C語(yǔ)言實(shí)現(xiàn)影院售票管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)影院售票管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
Inline Hook(ring3)的簡(jiǎn)單C++實(shí)現(xiàn)方法
這篇文章主要介紹了Inline Hook(ring3)的簡(jiǎn)單C++實(shí)現(xiàn)方法,需要的朋友可以參考下2014-08-08
C++利用多態(tài)實(shí)現(xiàn)職工管理系統(tǒng)(項(xiàng)目開(kāi)發(fā))
這篇文章主要介紹了C++利用多態(tài)實(shí)現(xiàn)職工管理系統(tǒng)(項(xiàng)目開(kāi)發(fā)),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
C++11 lambda表達(dá)式在回調(diào)函數(shù)中的使用方式
這篇文章主要介紹了C++11 lambda表達(dá)式在回調(diào)函數(shù)中的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
C++使用easyX庫(kù)實(shí)現(xiàn)三星環(huán)繞效果流程詳解
EasyX是針對(duì)C/C++的圖形庫(kù),可以幫助使用C/C++語(yǔ)言的程序員快速上手圖形和游戲編程。這篇文章主要介紹了C++使用easyX庫(kù)實(shí)現(xiàn)三星環(huán)繞效果,需要的可以參考一下2022-10-10

