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

實現(xiàn)代碼:
PBTree create()
{
char ch[20];
scanf("%s",ch);
int len = strlen(ch);
PBTree stack[20];
/* 用來存儲結點地址的棧 */
int top = 0;
/* 棧頂指針 */
int flag = 1;
/* 1表示現(xiàn)在需要創(chuàng)建左孩子,
2表示需要創(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;
}
希望本文所述對大家的C++程序設計有所幫助。
相關文章
C++實現(xiàn)猜數(shù)小游戲的實現(xiàn)
這篇文章主要介紹了C++實現(xiàn)猜數(shù)小游戲的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02
c++中臨時變量不能作為非const的引用參數(shù)的方法
下面小編就為大家?guī)硪黄猚++中臨時變量不能作為非const的引用參數(shù)的方法。小編覺得挺不錯的現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01
Inline Hook(ring3)的簡單C++實現(xiàn)方法
這篇文章主要介紹了Inline Hook(ring3)的簡單C++實現(xiàn)方法,需要的朋友可以參考下2014-08-08
C++利用多態(tài)實現(xiàn)職工管理系統(tǒng)(項目開發(fā))
這篇文章主要介紹了C++利用多態(tài)實現(xiàn)職工管理系統(tǒng)(項目開發(fā)),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
C++11 lambda表達式在回調函數(shù)中的使用方式
這篇文章主要介紹了C++11 lambda表達式在回調函數(shù)中的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
C++使用easyX庫實現(xiàn)三星環(huán)繞效果流程詳解
EasyX是針對C/C++的圖形庫,可以幫助使用C/C++語言的程序員快速上手圖形和游戲編程。這篇文章主要介紹了C++使用easyX庫實現(xiàn)三星環(huán)繞效果,需要的可以參考一下2022-10-10

