創(chuàng)新互聯(lián)建站于2013年創(chuàng)立,先為肅北等服務(wù)建站,肅北等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為肅北企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。文章目錄
目錄
文章目錄
前言
樹的結(jié)構(gòu)體定義
二叉樹的創(chuàng)建(先序遞歸)?
二叉樹的先序遍歷(遞歸)
二叉樹的中序遍歷(遞歸)?
二叉樹的后序遍歷(遞歸)
二叉樹的先序非遞歸遍歷算法1
二叉樹的先序非遞歸遍歷算法2
二叉樹的中序非遞歸算法
二叉樹的后序非遞歸算法1
二叉樹的非遞歸后序遍歷算法2
二叉樹的層次遍歷算法
主函數(shù)?
本篇文章主要包括二叉樹的創(chuàng)建以及二叉樹的前序、中序、后序遍歷的遞歸算法以及前序、中序、后序、層次遍歷的非遞歸算法
typedef struct node{
char data;
struct node *lchild,*rchild;
}*BiTree;
//遞歸建立二叉樹(先序遍歷)
void CreatBiTree(BiTree &T){
char c;
cin>>c;
if(c=='0'){
T=NULL;
}else{
T=new node;
T->data=c;
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
}
//先序遍歷遞歸
void PreOrder(BiTree T){
if(T!=NULL){
cout<data<<' ';
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
//遞歸中序遍歷
void InOrder(BiTree T){
if(T!=NULL){
InOrder(T->lchild);
cout<data<<' ';
InOrder(T->rchild);
}
}
//遞歸后序遍歷算法
void PostOrder(BiTree T){
if(T!=NULL){
PostOrder(T->lchild);
PostOrder(T->rchild);
cout<data<<' ';
}
}
頭文件中要包含#include
//非遞歸先序遍歷算法1
void PreOrder1(BiTree T){
if(T!=NULL){
stackSt;
BiTree p;
St.push(T);
while(!St.empty()){
p=St.top();
St.pop();
cout<data<<' ';
if(p->rchild!=NULL){
St.push(p->rchild);
}
if(p->lchild!=NULL){
St.push(p->lchild);
}
}
}
}
//非遞歸先序遍歷2
void PreOrder2(BiTree T){
if(T!=NULL){
stackSt;
BiTree p=T;
while(!St.empty()||p!=NULL){
while(p!=NULL){
cout<data<<' ';
St.push(p);
p=p->lchild;
}
if(!St.empty()){
p=St.top();
St.pop();
p=p->rchild;
}
}
}
}
與先序非遞歸遍歷算法2的區(qū)別僅在于節(jié)點(diǎn)值輸出的位置不同
//非遞歸中序遍歷
void InOrder1(BiTree T){
if(T!=NULL){
stackSt;
BiTree p=T;
while(!St.empty()||p!=NULL){
while(p!=NULL){
St.push(p);
p=p->lchild;
}
if(!St.empty()){
p=St.top();
St.pop();
cout<data<<' ';
p=p->rchild;
}
}
}
}
需要用到兩個(gè)棧
//非遞歸后序遍歷算法1
void PostOrder1(BiTree T){
if(T!=NULL){
stackSt1;
stackSt2;
BiTree p=NULL;
St1.push(T);
while(!St1.empty()){
p=St1.top();
St1.pop();
St2.push(p);
if(p->lchild!=NULL){
St1.push(p->lchild);
}
if(p->rchild!=NULL){
St1.push(p->rchild);
}
}
while(!St2.empty()){
p=St2.top();
St2.pop();
cout<data<<' ';
}
}
}
這個(gè)算法具有一個(gè)良好的性質(zhì):每當(dāng)訪問到這個(gè)節(jié)點(diǎn)時(shí),棧中存放的是這個(gè)節(jié)點(diǎn)的祖先節(jié)點(diǎn)。由這個(gè)算法可以改寫得到其他許多問題的解法。
//非遞歸后序遍歷算法2
void PostOrder2(BiTree T){
if(T!=NULL){
stackSt;
BiTree p=T;
BiTree r=NULL;
while(p!=NULL||!St.empty()){
if(p!=NULL){
St.push(p);
p=p->lchild;
}
else{
p=St.top();
if(p->rchild!=NULL&&p->rchild!=r){
p=p->rchild;
}else{
p=St.top();
St.pop();
cout<data<<' ';
r=p;
p=NULL;
}
}
}
}
}
頭文件中要包含#include
//層次遍歷
void LevelOrder(BiTree T){
queueQ;
Q.push(T);
BiTree p;
while(!Q.empty()){
p=Q.front();
Q.pop();
cout<data<<' ';
if(p->lchild!=NULL){
Q.push(p->lchild);
}
if(p->rchild!=NULL){
Q.push(p->rchild);
}
}
}
主函數(shù)?
int main(){
system("chcp 65001");//控制輸出中文
BiTree T;
CreatBiTree(T);
cout<<"二叉樹的先序遍歷序列為:";
PreOrder(T);
cout<
運(yùn)行結(jié)果如下圖所示:
上例中建的樹如下圖所示:
總結(jié)? 以上就是這篇文章的全部內(nèi)容,介紹了二叉樹的構(gòu)建以及遍歷。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前標(biāo)題:【我的算法筆記】二叉樹的創(chuàng)建、二叉樹的遍歷(遞歸、非遞歸)-創(chuàng)新互聯(lián)
URL地址:http://muchs.cn/article46/cdiohg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、外貿(mào)網(wǎng)站建設(shè)、Google、做網(wǎng)站、移動網(wǎng)站建設(shè)、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容