日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二叉树的建立和遍历的各种问题

發(fā)布時間:2025/7/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二叉树的建立和遍历的各种问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

鏈表聲明:

//基本結構聲明 #include<iostream> #include<queue> #include<stack> #include<cstdio>#define NoInfo 0 // 0表示沒有結點 using namespace std; typedef int ElementType; typedef struct TNode* Position; typedef Position BinTree; //二叉樹鏈表結構 struct TNode{ElementType Data; //結點數(shù)據(jù) BinTree Left; //左子樹 BinTree Right; //右子樹 };   View Code

1.先序建立二叉樹

//先序建立二叉樹 BinTree CreateBinTree(){ElementType data;scanf("%d",&data);if(data==NoInfo) return NULL;BinTree P;P=new TNode;P->Data=data;P->Left=CreateBinTree();P->Right =CreateBinTree();return P; } View Code

2.層序建立二叉樹

//層序建立二叉樹 BinTree CreateBinTree(){ElementType data;BinTree BT,T;queue<BinTree> q;//創(chuàng)建隊列scanf("%d",&data);if(data!=NoInfo){BT=new TNode;BT->Data =data;BT->Left =BT->Right =NULL;q.push(BT);}else return NULL;//第一個數(shù)據(jù)為0則返回空樹while(!q.empty()){T=q.front();//取出結點 q.pop();scanf("%d",&data);//讀入T的左孩子 if(data==NoInfo) T->Left =NULL;else{T->Left =new TNode;T->Left ->Data=data;T->Left ->Left=T->Left ->Right=NULL;q.push(T->Left );}scanf("%d",&data);//讀入T的右孩子 if(data==NoInfo) T->Right =NULL;else{T->Right =new TNode;T->Right ->Data=data;T->Right ->Left=T->Right ->Right=NULL;q.push(T->Right );}}return BT; } View Code

3.遞歸先序遍歷

void PreorderTraversal_1(BinTree BT){if(BT){printf("%d",BT->Data );PreorderTraversal_1(BT->Left );PreorderTraversal_1(BT->Right );} } View Code

4.非遞歸先序遍歷

void PreorderTraversal_2(BinTree BT){BinTree T=BT;stack<BinTree> s;while(T||!s.empty()){while(T){printf("%d",T->Data );s.push(T);T=T->Left ;}T=s.top();s.pop();T=T->Right ;} } View Code

5.遞歸中序遍歷

void InorderTraversal_1(BinTree BT){if(BT){InorderTraversal_1(BT->Left );printf("%d",BT->Data );InorderTraversal_1(BT->Right );} } View Code

6.非遞歸中序遍歷

//非遞歸中序遍歷 void InorderTraversal_2(BinTree BT){BinTree T=BT;stack<BinTree> s;while(T||!s.empty()){while(T){s.push(T);T=T->Left ;}T=s.top();s.pop();printf("%d",T->Data );T=T->Right ;} } View Code

7.遞歸后序遍歷

//遞歸后序遍歷 void PostorderTraversal_1(BinTree BT){if(BT){PostorderTraversal_1(BT->Left );PostorderTraversal_1(BT->Right );printf("%d",BT->Data );} } View Code

8.非遞歸后序遍歷

//非遞歸后序遍歷 void PostorderTraversal_2(BinTree BT){BinTree T,Pre=NULL;stack<BinTree> s;s.push(BT);while(!s.empty()){T=s.top();if( (T->Left ==NULL&&T->Right ==NULL) || (Pre!=NULL&& (T->Left==Pre ||T->Right==Pre ) ) ){printf("%d",T->Data );s.pop();Pre=T;}else{if(T->Right !=NULL) s.push(T->Right );if(T->Left !=NULL) s.push(T->Left );}} } View Code

9.層序遍歷

void LevelorderTravelsal(BinTree BT){queue<BTree> q;BinTree T;if(!BT) return;q.push(BT);while(!q.empty()){T=q.front();q.pop();printf("%d ",T->Data);if(T->Left ) q.push(T->Left );if(T->Right ) q.push(T->Right );} } View Code

10.二叉樹高度

//二叉樹高度 int GetHeight(BinTree BT){if(BT) return max(GetHeight(BT->Left),GetHeight(BT->Right ))+1;else return 0;//空樹高度為0 } View Code

11.求二叉樹所有結點

//求二叉樹所有結點 int CountNode(BinTree BT){if(BT) return CountNode(BT->Left )+CountNode(BT->Right )+1;else return 0; } View Code

12.求二叉樹葉子結點

void LeaveCount(BinTree BT){if(BT){if(BT->Left ==NULL&&BT->Right ==NULL)count++;LeaveCount(BT->Left );LeaveCount(BT->Right ); } } View Code

?

int LeafcountofBinTree(BinTree BT){if(BT){if(BT->Left ==NULL&&BT->Right ==NULL)return LeafcountofBinTree(BT->Left )+LeafcountofBinTree(BT->Right )+1;}else return 0; } View Code

13.先序輸出二叉樹葉子結點?

void PreorderPrintLeaves(BinTree BT){if(BT!=NULL){if((BT->Left==NULL)&&(BT->Right==NULL))printf(" %c",BT->Data);PreorderPrintLeaves(BT->Left);PreorderPrintLeaves(BT->Right);} } View Code

14.鏡面反轉(zhuǎn),將所有非葉結點的左右孩子對換?

void Inversion(BinTree BT){if(BT){Inversion(BT->Left);Inversion(BT->Right);BinTree temp;temp=BT->Left ;BT->Left =BT->Right ;BT->Right =temp;} } View Code

15.銷毀二叉樹

void DestroyBinTree(BinTree BT){if(BT){DestroyBinTree(BT->Left );DestroyBinTree(BT->Right );delete BT;BT=NULL;} } View Code

16.根據(jù)前序和中序遍歷還原二叉樹?

?1. 根據(jù)前序序列的第一個元素建立根結點;
2. 在中序序列中找到該元素,確定根結點的左右子樹的中序序列;
3. 在前序序列中確定左右子樹的前序序列;
4. 由左子樹的前序序列和中序序列建立左子樹;
5. 由右子樹的前序序列和中序序列建立右子樹。

//根據(jù)前序和中序遍歷還原二叉樹 BinTree PreInoRestoreBinTree(int* inorder ,int* preorder, int length) {if(length==0) return NULL;BinTree T=new TNode;int rootIndex;T->Data = *preorder;for(rootIndex=0;rootIndex < length; rootIndex++)if(inorder[rootIndex] == *preorder)break;T->Left = PreInoRestoreBinTree(inorder,preorder +1 , rootIndex);T->Right = PreInoRestoreBinTree(inorder + rootIndex + 1 ,preorder + rootIndex + 1 , length - (rootIndex + 1));return T; } View Code

17.根據(jù)后序和中序遍歷還原二叉樹?

?1. 根據(jù)后序序列的最后一個元素建立根結點;
2. 在中序序列中找到該元素,確定根結點的左右子樹的中序序列;
3. 在后序序列中確定左右子樹的后序序列;
4. 由左子樹的后序序列和中序序列建立左子樹;
5. 由右子樹的后序序列和中序序列建立右子樹

BinTree InoPosRestoreBinTree(int *inorder,int *postorder,int length) {if(length==0) return NULL;BinTree T;int rootindex;T =new TNode;T->Data=postorder[length-1];T->Left=T->Right=NULL;for(rootindex=0; rootindex < length; rootindex++)if(inorder[rootindex] == postorder[length-1])break;T->Left =InoPosRestoreBinTree(inorder,postorder,rootindex);T->Right =InoPosRestoreBinTree(inorder+rootindex+1,postorder+rootindex,length-(rootindex+1));return T; } View Code

?17.1 根據(jù)中序和后序輸出前序

#include<iostream> #include<vector> #include<string> using namespace std; string in, post, ans=""; void pre(int root, int l, int r){if(l>r) return ;int i=l;while(in[i] != post[root]) i++;//printf("%d %d %d %d\n",root,l,r,i);ans += post[root];//cout<<"L"<<endl;pre(root-r+i-1, l, i-1);//cout<<"R"<<endl;pre(root-1, i+1, r); } int main(){cin>>in>>post;pre(post.size()-1,0,post.size()-1);cout<<ans<<endl;return 0; } View Code

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/astonc/p/9906518.html

總結

以上是生活随笔為你收集整理的二叉树的建立和遍历的各种问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久白虎 | 176精品免费| 一区二区xxx | 欧美一级一片 | 婷久久| 男人和女人日批视频 | 高清中文字幕 | 久久久99精品国产一区二区三区 | 亚洲AV乱码国产精品观看麻豆 | 亚洲国产成人自拍 | 国产精品久久久久久精 | 精品国产自在精品国产精小说 | 精品福利在线观看 | 毛片日本| 国产麻豆一区二区三区 | 一级黄色裸体片 | 欧美一区二区高清视频 | 国产日本亚洲 | 国产21区 | 国产精品一级黄色片 | 91精品国产成人 | 窝窝午夜理论片影院 | 天天色天天干天天色 | av解说在线 | 淫语对白 | 久久久久国色av免费观看性色 | 欧类av怡春院| 欧美xxxx吸乳 | 无码人妻丰满熟妇啪啪 | 丁香六月五月婷婷 | 曰本丰满熟妇xxxx性 | 欧美一级大片 | 91av中文字幕 | 欧美人妻一区二区 | 久久激情网 | 亚洲AV无码国产精品国产剧情 | 无码精品人妻一区二区三区影院 | 偷拍第1页| 国产最新在线视频 | 免费国产一区二区三区 | 91亚洲精华| 超碰人人澡 | 亚洲区小说区图片区 | 黄色大片子| 欧美不卡一区二区 | 日韩伦理一区二区 | 佐佐木明希av在线 | 无人码人妻一区二区三区免费 | 国产欧美精品一区二区 | 人人妻人人澡人人爽人人精品 | 在线看片你懂的 | 97伊人超碰 | 动漫女被黄漫免费视频 | 黄色特级视频 | 阿v免费视频 | 国产成人观看 | 日本资源在线 | 五月激情啪啪 | 国产的av | 人妻体内射精一区二区 | 少妇爽| 国产欧美精品一区二区色综合朱莉 | 麻豆日韩| 日皮视频免费观看 | 日韩18p| 欧美色图片区 | 日日夜夜精 | 欧美视频在线免费 | 日本三级aaa| 日韩av一区在线 | 男人透女人免费视频 | 可以免费看黄的网站 | 三年中文免费观看大全动漫 | 亚洲视频天天射 | 精品成人一区二区三区久久精品 | 黄色录像三级 | 国产精品伦一区二区三区免费看 | 激情五月在线 | 国产交换配乱淫视频免费 | 亚洲天堂2013 | 极品探花在线播放 | 久久b| 亚洲国产精品成人综合 | 欧美日韩伊人 | 新版红楼梦在线高清免费观看 | 成人短视频在线 | 人人妻人人澡人人爽人人精品 | 日韩av电影手机在线观看 | juliaann第一次和老师 | 成人福利网站在线观看 | 亚洲老女人av| 欧美精品一区二区性色a+v | 都市激情亚洲一区 | 国产剧情在线 | 正在播放adn156松下纱荣子 | 成人毛片在线视频 | a级片在线观看视频 | 激情春色网| 久久国产精品免费视频 |