創新互聯建站于2013年創立,先為肅北等服務建站,肅北等地企業,進行企業商務咨詢服務。為肅北企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。文章目錄
目錄
文章目錄
前言
樹的結構體定義
二叉樹的創建(先序遞歸)?
二叉樹的先序遍歷(遞歸)
二叉樹的中序遍歷(遞歸)?
二叉樹的后序遍歷(遞歸)
二叉樹的先序非遞歸遍歷算法1
二叉樹的先序非遞歸遍歷算法2
二叉樹的中序非遞歸算法
二叉樹的后序非遞歸算法1
二叉樹的非遞歸后序遍歷算法2
二叉樹的層次遍歷算法
主函數?
本篇文章主要包括二叉樹的創建以及二叉樹的前序、中序、后序遍歷的遞歸算法以及前序、中序、后序、層次遍歷的非遞歸算法
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的區別僅在于節點值輸出的位置不同
//非遞歸中序遍歷
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;
}
}
}
}
需要用到兩個棧
//非遞歸后序遍歷算法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<<' ';
}
}
}
這個算法具有一個良好的性質:每當訪問到這個節點時,棧中存放的是這個節點的祖先節點。由這個算法可以改寫得到其他許多問題的解法。
//非遞歸后序遍歷算法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);
}
}
}
主函數?
int main(){
system("chcp 65001");//控制輸出中文
BiTree T;
CreatBiTree(T);
cout<<"二叉樹的先序遍歷序列為:";
PreOrder(T);
cout<
運行結果如下圖所示:
上例中建的樹如下圖所示:
? 以上就是這篇文章的全部內容,介紹了二叉樹的構建以及遍歷。
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
當前標題:【我的算法筆記】二叉樹的創建、二叉樹的遍歷(遞歸、非遞歸)-創新互聯
URL地址:http://vcdvsql.cn/article46/cdiohg.html
成都網站建設公司_創新互聯,為您提供網站收錄、外貿網站建設、Google、做網站、移動網站建設、定制網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯