亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++實現二叉樹以及幾種遍歷方式

2020-02-24 14:35:28
字體:
來源:轉載
供稿:網友

2018年的最后一個月,談大的理想抱負已經不夠時間來實現,但小計劃還是可以的,下面武林技術小編就給各位帶來這篇C++++實現二叉樹以及幾種遍歷方式,可能有些小伙伴都接觸過,但是這里還是要分享給大家,與君共勉,一起學習。

1. 前序/中序/后序遍歷(遞歸實現)


// 前序遍歷
void BT_PreOrder(BiTreePtr pNode){
if (!pNode)? return;???
visit(pNode);??
BT_PreOrder(pNode->left);
BT_PreOrder(pNode->right);?? }
// 中序遍歷
void BT_PreOrder(BiTreePtr pNode){?
if (!pNode)? return;????
BT_PreOrder(pNode->left);??
visit(pNode);??
BT_PreOrder(pNode->right);}
// 后序遍歷void BT_PreOrder(BiTreePtr pNode){???
if (!pNode)? return;??????
BT_PreOrder(pNode->left);??
BT_PreOrder(pNode->right);???
visit(pNode);}


2. 前序遍歷(非遞歸實現)

?

?


// 用棧實現
void BT_PreOrderNoRec1(BiTreePtr pNode){
stack s;
while (!pNode || !s.empty())?
{??????
if (!pNode)?
{???????????
visit(pNode);???
s.push(pNode);???????
pNode = pNode->left;??
}??????
else??????
{??????????
pNode = s.pop();
pNode = pNode->right;????
}?
}
}
// 用棧實現
void BT_PreOrderNoRec2(BiTreePtr pNode){
if (!pNode)??
{??????
stack s;?
s.push(pNode);?????
while (!s.empty())??
{??????????
BiTreePtr pvNode = s.pop();
visit(pvNode);?????????
s.push(pvNode->right);??????
s.push(pvNode->left);??
}??
}}
//
不用棧實現 每個節點含父節點指針和isVisited【默認為false】狀態變量 且該二叉樹含一個頭節點
void BT_PreOrderNoRec3(BiTreePtr pNode){???
while (!pNode)
// 回溯到指向根節點的頭節點時退出?
{???????
if( !pNode->bVisited )
// 判定是否已被訪問???
{?????????????
visit(pNode);???
pNode->isVisited = true;??
}???????
if ( pNode->left && !pNode->left->isVisited )????
pNode = pNode->left;?????
else if( pNode->right && !pNode->right->isVisited )?
pNode = pNode->right;??????
else??
//回溯????
pNode = pNode->parent;?
}}

?

3. 中序遍歷(非遞歸實現)


// 用棧實現
void BT_InOrderNoRec1(BiTreePtr pNode){
stack s;
while (!pNode || !s.empty())??
{??????
if (!pNode)??????
{?????????
s.push(pNode);??????
pNode = pNode->left;???
}??
else??
{???????
pNode = s.pop();?
visit(pNode);??????
pNode = pNode->right;
}?
}}
// 不用棧實現 每個節點含父節點指針和isVisited【默認為false】的狀態變量 且該二叉樹含一個頭節點
void BT_InOrderNoRec2(BiTreePtr pNode){???
while (!pNode)
// 回溯到指向根節點的頭節點時退出
{?????
while (pNode->left && !pNode->left->isVisited)??????
pNode = pNode->left;?????
if (!pNode->isVisited)??????
{?????????
visit(pNode);???
pNode->isVisited=true;??
}?????
if (pNode->right && !pNode->right->isVisited)?
pNode = pNode->right;??
else?????????
pNode = pNode->parent;
}}


4. 后序遍歷(非遞歸實現)

?

?


void BT_PostOrderNoRec(BiTreePtr pNode){
if(!pNode) return;
stack s;
s.push(pNode);?
while (!s.empty())??
{????
BiTreePtr pvNode = s.pop();?
if (pvNode->isPushed)
// 表示其左右子樹都已入棧,訪問該節點??????
visit(pvNode);???
else????
{???????
if (pvNode->right)?
{?????????????
pvNode->right->isPushed = false;
S.push(pvNode->right);?????????
}??????????
if (pvNode->left)????
{??????????????
pvNode->left->isPushed = false;??
s.push(pvNode->left);?????????
}?????????
pvNode->isPushed = true;?????
s.push(pvNode);???
}??
}}

?

5. 層序遍歷(使用隊列)


void BT_LevelOrder(BiTreePtr pNode){
if (!pNode) return;??
queue q;??
q.push(pNode);?
BiTreePtr pvNode;
while (!q.empty())
{?????
pvNode = q.pop();????
visit(pvNode);??
if (pvNode->left)
q.push(pvNode->left);?
if (pvNode->right)???
q.push(pvNode->right);??
}}

到這里,C++實現二叉樹以及幾種遍歷方式的介紹就算完成了,如果有什么不清楚可以留言給我,如果覺得我寫得不錯的話,請給武林一個關注,謝謝!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美成人精品| 日韩av最新在线| 精品香蕉一区二区三区| 中文字幕在线观看亚洲| 一区二区欧美久久| 18一19gay欧美视频网站| 亚洲免费成人av电影| 中文字幕免费精品一区高清| 欧美精品激情在线观看| 91免费观看网站| 69久久夜色精品国产69| 亚洲一区二区久久| 欧美精品久久久久久久| 亚洲精品一区中文| 日韩中文字幕av| 久久综合九色九九| 亚洲精品久久久久久久久久久久| 欧美性猛交xxxx黑人猛交| 91精品国产91久久久久久最新| 国产精品久久久久久久久久尿| 亚洲精品美女视频| 欧美中文在线观看国产| 日韩在线视频免费观看高清中文| 伊人伊成久久人综合网小说| 国产99视频精品免视看7| 欧美亚洲另类制服自拍| 久久久久久久久综合| 国产日韩欧美在线视频观看| 亚洲人成在线免费观看| 大伊人狠狠躁夜夜躁av一区| 最近2019中文字幕一页二页| 国内外成人免费激情在线视频网站| 国产一级揄自揄精品视频| 国产成人精品最新| 国产日韩欧美日韩大片| 中文欧美在线视频| 日韩av在线电影网| 亚洲aⅴ日韩av电影在线观看| 国产成人在线一区| 欧美日韩国产在线播放| 九九热这里只有精品6| 91久久精品久久国产性色也91| 欧洲s码亚洲m码精品一区| 日韩av电影在线播放| 亚洲无线码在线一区观看| 欧洲精品久久久| 91精品国产综合久久香蕉922| 亚洲一级黄色片| 日韩精品免费视频| 日韩电影大片中文字幕| 日韩电影在线观看中文字幕| 久久人人爽亚洲精品天堂| 日韩一级黄色av| 欧美在线激情视频| 亚洲一区二区免费在线| 成人精品视频99在线观看免费| 成人两性免费视频| 亚洲跨种族黑人xxx| 18一19gay欧美视频网站| 国产成人av在线播放| 亚洲视频在线观看免费| 777午夜精品福利在线观看| 欧美中文字幕精品| 久久久久久网址| 91亚洲国产成人久久精品网站| 日韩日本欧美亚洲| 日本成人免费在线| 久久精品色欧美aⅴ一区二区| 欧美精品激情在线观看| 中文字幕精品—区二区| 97视频在线观看成人| 色噜噜国产精品视频一区二区| 国产成人精品视频在线观看| 国产99久久精品一区二区| 国内精品400部情侣激情| 国产精品亚洲自拍| 视频一区视频二区国产精品| 亚洲精品日韩激情在线电影| 国产日韩欧美电影在线观看| 亚洲欧洲自拍偷拍| 欧美xxxx14xxxxx性爽| 亚洲精品电影在线观看| 亚洲天堂男人的天堂| 91免费精品国偷自产在线| 精品亚洲国产成av人片传媒| 免费av一区二区| 久久人人爽亚洲精品天堂| 欧美成人免费va影院高清| 一区二区亚洲欧洲国产日韩| 亚洲专区国产精品| 清纯唯美亚洲激情| 欧美精品videosex极品1| 国内精品国产三级国产在线专| 国产精品视频播放| 亚洲永久免费观看| 国产精品视频地址| 国产一级揄自揄精品视频| 91精品视频在线免费观看| 国产精品va在线播放我和闺蜜| 亚洲精品一区二区在线| 成人观看高清在线观看免费| 国产欧美一区二区三区四区| 国产精品久久久久aaaa九色| 亚洲少妇激情视频| 亚洲欧美日韩视频一区| 欧美一级视频在线观看| 亚洲视频精品在线| 久久精品国产亚洲精品| 欧美xxxx18性欧美| 国产精品视频成人| 久久久久中文字幕| 国产成人精品日本亚洲专区61| 国产v综合v亚洲欧美久久| 亚洲成人激情在线| 91精品国产色综合久久不卡98| 欧美黑人巨大xxx极品| 自拍偷拍亚洲区| 另类图片亚洲另类| 日韩欧美亚洲范冰冰与中字| 久久视频这里只有精品| 欧美一区二区三区精品电影| 国产mv免费观看入口亚洲| 色噜噜久久综合伊人一本| 久久久久北条麻妃免费看| 国产激情视频一区| 神马久久桃色视频| 久久亚洲精品小早川怜子66| 国产成人高清激情视频在线观看| 91热精品视频| www.99久久热国产日韩欧美.com| 色综合91久久精品中文字幕| 亚洲欧美日本精品| 91精品在线一区| 日韩性生活视频| 欧美日韩一区二区免费在线观看| 亚洲天堂成人在线| 国产日韩欧美日韩大片| 国内精品免费午夜毛片| 亚洲欧美日韩直播| 国产99久久精品一区二区 夜夜躁日日躁| 国产精品成人品| 国产成人高清激情视频在线观看| 久久精品影视伊人网| 久久99国产精品自在自在app| 国产精品香蕉av| 亚洲男人天堂网站| 久久精品国产一区二区电影| 欧美日韩亚洲成人| 青青久久aⅴ北条麻妃| 2019精品视频| 欧美在线激情网| 成人两性免费视频| 国产一区二区香蕉| 欧美成人免费在线视频| 欧美激情视频一区二区三区不卡| 欧美成人精品一区二区| 中文字幕日韩精品有码视频| 91精品中文在线| 亚洲欧美日韩第一区| 久久电影一区二区| 亚洲最大中文字幕| 国产精品丝袜一区二区三区| 日韩国产高清污视频在线观看| 中文欧美在线视频|