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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

数据结构(六)二叉树的遍历(递归非递归方法)

發布時間:2023/11/30 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构(六)二叉树的遍历(递归非递归方法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據結構(六)二叉樹的遍歷(遞歸非遞歸方法)

一、遞歸方法

1.先序遍歷

void PreOrder(BiTree T) {visit(T);PreOrder(T->LChild)PreOrder(T->RChild) }

2.先序遍歷

void PreOrder(BiTree T) {PreOrder(T->LChild)visit(T);PreOrder(T->RChild) }

3.先序遍歷

void PreOrder(BiTree T) {PreOrder(T->LChild)PreOrder(T->RChild)visit(T); }

二、非遞歸方法

非遞歸的方法我們主要采用棧的方法,先進后出

1.中序遍歷

void MidSearch01(BiTree T) {stack<BitTNode*> p;while (T || !p.empty()){if (T){p.push(T);T = T->lchild;}else{T = p.top();cout << T->data << "\t";p.pop();T = T->rchild;}}}

2.先序遍歷

//前序遍歷(非遞歸)void PreSearch01(BiTree T) {stack<BitTNode*> p;while (T || !p.empty()){if (T){cout << T->data << "\t";p.push(T);T = T->lchild;}else{T= p.top();p.pop();T = T->rchild;}} }

3.后序遍歷

后序遍歷相對于前中序遍歷要麻煩一些

BitTNode* r = NULL;//標記位置 //后序遍歷(非遞歸) void PostSearch01(BiTree T) {stack<BitTNode*> p;while (T || !p.empty()){if (T){p.push(T);T = T->lchild;}else{T = p.top();if (T->rchild && T->rchild != r){T = T->rchild;p.push(T);T = T->lchild;}else{p.pop();cout << T->data << "\t";r = T;T = NULL;}}}}

4.層次遍歷

//層次遍歷 void LevelOrder(BiTree T) {queue<BitTNode*> q;q.push(T);while (!q.empty()){T = q.front();q.pop();cout << T->data << "\t";if (T->lchild != NULL){q.push(T->lchild);}if (T->rchild != NULL){q.push(T->rchild);}}}

總結

以上是生活随笔為你收集整理的数据结构(六)二叉树的遍历(递归非递归方法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。