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

首頁 > 學院 > 開發設計 > 正文

二叉樹的重建

2019-11-06 06:01:50
字體:
來源:轉載
供稿:網友

在http://blog.csdn.net/hacker_zhidian/article/details/60586445這篇文章中我們看了一下二叉樹的四種遍歷方式,接下來我們看一下關于二叉樹的重建問題,什么叫二叉樹的重建呢?

比方說給你一棵二叉樹的前序遍歷順序和中序遍歷順序,要求你求出這顆二叉樹的后序遍歷順序。來看一下個具體的例題數據,給定一個二叉樹的信息:

二叉樹節點數: 5 前序遍歷順序:1 2 3 4 5 中序遍歷順序:3 2 4 1 5 求后續遍歷順序?

像這種題目咋一看沒什么頭緒啊,如果不熟悉二叉樹的性質,這種題是挺費腦的。但是我們仔細想想,二叉樹的前序遍歷順序是:根節點 –> 左子樹 –> 右子樹 中序遍歷的順序是:左子樹 –> 根節點 –> 右子樹。

那么從上面的數據中,我們可以知道,節點值為 1 的節點就是整個二叉樹的根節點。之后再去中序遍歷的順序中找節點值為 1 的節點位置,我們在中序遍歷的順序中發現, 節點值為 1 的節點右邊有一個節點值為 5 的節點,左邊有三個節點值分別為 3 2 4 的節點。Ok,根據中序遍歷的順序,我們知道節點值為 1 的節點有兩棵子樹,節點值為 1 的節點有兩個子節點,接下來,我們要對這個節點的做右子節點進行討論:前序遍歷的順序的第二個節點(節點值為 2 )就是節點值為 1 的節點的左子節點,接下來繼續查找這個節點值為 2 的節點在中序遍歷中的位置,我們發現節點值為 2 的節點在中序遍歷中也存在左右子節點,那么繼續對它的左右子節點討論。。。

整個過程的代碼,也是這個問題的核心代碼:

// 重建二叉樹以第 n 個節點為根節點的子二叉樹,l 為二叉樹節點的左邊界,r 為右邊界void rec(int l, int r, int n) { if(l >= r) { node[n].w = INF; // 如果當前節點為空,那么賦值為 INF return ; } int root = PRe[pos++]; node[n].w = root; // 獲取當前節點儲存的值 node[n].l = 2 * n; // 當前節點左孩子所在數組下標 node[n].r = 2 * n + 1; // 當前節點右孩子節點所在數組下標 int m = find(in, in+r, root) - in; // 得到當前節點在中序遍歷數組中的下標 rec(l, m, 2*n); // 重建左子樹 rec(m+1, r, 2*n+1); // 重建右子樹 }

上述代碼中,node儲存的是二叉樹節點的信息數組。下面給出完整的代碼:

/* * 根據二叉樹的前序遍歷和中序遍歷重建二叉樹, * 這里依然采用數組下標來模擬指針 */#include <iostream>#include <algorithm>using namespace std;const int INF = -999999999; // 二叉樹節點為空的時候儲存的數值 const int N = 100010; // 二叉樹的節點個數 int pre[N]; // 二叉樹前序遍歷的結果 int in[N]; // 二叉樹中序遍歷的結果 int pos; struct Node { // 節點信息結構體 int l; // 節點的左孩子所在數組下標 int r; // 節點的右孩子所在數組下標 int w; // 節點的值 }; Node node[N]; // 儲存二叉樹節點信息的數組 // 重建二叉樹的第 n 個節點為根節點的子二叉樹, l 為二叉樹節點的左邊界,r 為右邊界void rec(int l, int r, int n) { if(l >= r) { node[n].w = INF; // 如果當前節點為空,那么賦值為 -1 return ; } int root = pre[pos++]; node[n].w = root; // 獲取當前節點儲存的值 node[n].l = 2 * n; // 當前節點左孩子所在數組下標 node[n].r = 2 * n + 1; // 當前節點右孩子節點所在數組下標 int m = find(in, in+r, root) - in; // 得到當前節點在中序遍歷數組中的下標 rec(l, m, 2*n); // 重建左子樹 rec(m+1, r, 2*n+1); // 重建右子樹 }// 后序遍歷重建的二叉樹 void postOrderParse(int n) { if(node[n].w == INF) { // 如果當前節點為空,那么結束輸出 return ; } postOrderParse(2*n); postOrderParse(2*n+1); // 這里輸出沒有嚴格的控制空格個數,在 OJ 上做題的小伙伴注意一下 cout << node[n].w << " "; } int main() { int n; cin >> n; for(int i = 0; i < n; i++) { cin >> pre[i]; } for(int i = 0; i < n; i++) { cin >> in[i]; } rec(0, n, 1); // 從二叉樹根節點開始重建二叉樹 cout << "該二叉樹的后序遍歷:" << endl; postOrderParse(1); return 0;}

好了。來看一下運行結果:

這里寫圖片描述

我們可以手工構造出這棵二叉樹:

這里寫圖片描述

根據二叉樹的遍歷順序,我們可以很容易得到該二叉樹的后續遍歷,和程序執行的結果一樣。這種二叉樹重建的思想可以解決一類問題,感興趣的小伙伴可以看一下這篇文章 http://blog.csdn.net/Hacker_ZhiDian/article/details/60771795。

或者試一下這道題https://www.patest.cn/contests/gplt/L2-011

好了,如果博客中有什么不正確的地方,還請多多指點。如果覺得我寫得不錯,請點個贊表示對我的支持。

謝謝觀看。。。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久免费在线观看| 日韩va亚洲va欧洲va国产| 91精品视频在线播放| 日韩欧美在线播放| 欧美亚洲伦理www| 亚洲精品日产aⅴ| 成人av在线天堂| 九九热精品视频| 国产免费久久av| 国产精品日韩电影| 在线免费观看羞羞视频一区二区| 亚洲伊人久久综合| 久久久www成人免费精品张筱雨| 中文字幕av一区| 91网站在线免费观看| 91在线免费观看网站| 日韩av快播网址| 久久99亚洲精品| 亚洲精品免费网站| 国产视频亚洲精品| 日日骚久久av| 国产美女扒开尿口久久久| 亚洲高清福利视频| 国产精品极品美女粉嫩高清在线| 国产精品亚洲欧美导航| 久久精品一区中文字幕| 亚洲精品小视频在线观看| 91国产美女在线观看| 激情久久av一区av二区av三区| 欧美国产日韩一区二区在线观看| 一本色道久久88综合亚洲精品ⅰ| 欧美成人性色生活仑片| 亚洲一区二区自拍| 国产精品手机播放| 欧美大片网站在线观看| 久久视频精品在线| 久久国产精品视频| 亚洲色在线视频| 国产精品久久精品| 欧美久久久精品| 久久久久久国产精品| 精品视频久久久久久| 91在线观看免费高清完整版在线观看| 国产精品爽爽爽爽爽爽在线观看| 最近2019年中文视频免费在线观看| 欧美性视频在线| 亚洲性生活视频在线观看| 97精品国产91久久久久久| 91九色在线视频| 久久久亚洲成人| 92版电视剧仙鹤神针在线观看| 亚洲va欧美va在线观看| 91精品久久久久久| 日韩av一卡二卡| 欧洲成人免费aa| yellow中文字幕久久| 久久亚洲一区二区三区四区五区高| 欧美二区在线播放| 狠狠色狠狠色综合日日小说| 狠狠躁天天躁日日躁欧美| 日av在线播放中文不卡| 欧美电影免费观看大全| 久久久精品国产| 国产一区二区三区直播精品电影| 成人国产精品久久久| 亚洲xxxxx| 精品国产鲁一鲁一区二区张丽| 久久久噜噜噜久久久| 午夜精品美女自拍福到在线| 欧美老肥婆性猛交视频| 欧美野外猛男的大粗鳮| 日本精品久久中文字幕佐佐木| 日韩欧美在线视频观看| 久久久久久久久久亚洲| 成人a级免费视频| 国产精品igao视频| 国产精品美女久久久久av超清| 日韩av中文字幕在线免费观看| 国产精品香蕉av| 精品视频一区在线视频| 日韩激情视频在线播放| 中文字幕在线看视频国产欧美在线看完整| 欧美日韩裸体免费视频| 欧美影院在线播放| 亚洲精品国产精品国自产观看浪潮| 97色在线视频观看| 色噜噜亚洲精品中文字幕| 亚洲va码欧洲m码| 久久人体大胆视频| 久久久精品网站| 亚洲无亚洲人成网站77777| 日韩中文字幕在线看| 欧美—级a级欧美特级ar全黄| 国产成人精品视频在线| 欧美电影免费观看高清| 久久精品视频一| 欧美性xxxxx| 日韩一区二区在线视频| 国产偷国产偷亚洲清高网站| 国产精品久久久久久久7电影| 亚洲人成亚洲人成在线观看| www.久久久久久.com| 国产精品精品视频| 久久精品视频在线观看| 亚洲电影免费观看高清完整版在线观看| 亚洲视频在线观看| 欧美第一黄网免费网站| 国产自产女人91一区在线观看| 美女精品视频一区| 97视频在线观看成人| 91最新国产视频| 国产成人精品在线视频| 91chinesevideo永久地址| 亚洲三级av在线| 国产精品国产三级国产专播精品人| 日本午夜精品理论片a级appf发布| 日韩女在线观看| 国产成人在线亚洲欧美| 亚洲成av人乱码色午夜| 国产男人精品视频| 国产精品久久久久久久久久尿| 午夜精品久久17c| 亚洲精品免费在线视频| 日韩av电影免费观看高清| 日韩在线中文字| 欧美国产日韩精品| 国产精品福利在线观看| 岛国av一区二区在线在线观看| 成人xvideos免费视频| 欧美极品第一页| 2021久久精品国产99国产精品| 久久高清视频免费| 成人精品久久一区二区三区| 亚洲va欧美va在线观看| 亚洲午夜女主播在线直播| 色综合天天狠天天透天天伊人| 色综合久久悠悠| 在线看日韩av| 久久久久久久一区二区| 在线日韩中文字幕| 亚洲在线观看视频网站| 成人欧美一区二区三区在线湿哒哒| 91精品国产一区| 国产精品夫妻激情| 久久久国产91| 欧美一级电影免费在线观看| 久久视频在线播放| 午夜精品久久久久久久99热| 国产精品福利在线| 久久久国产精品视频| 91精品国产91久久久久久最新| 欧美日韩激情视频8区| 日韩av免费在线观看| 精品性高朝久久久久久久| 久久久国产精品亚洲一区| 国产精品黄页免费高清在线观看| 成人免费高清完整版在线观看| 91精品免费视频| 亚洲男人天堂九九视频| 国产福利成人在线| 亚洲黄色在线观看| 亚洲日本aⅴ片在线观看香蕉| 日韩成人免费视频| 久久免费精品视频|