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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

前序中序确认二叉树 7-23 还原二叉树(25 分)

發布時間:2025/4/9 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 前序中序确认二叉树 7-23 还原二叉树(25 分) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

7-23?還原二叉樹(25?分)

給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。

輸入格式:

輸入首先給出正整數N(50),為樹中結點總數。下面兩行先后給出先序和中序遍歷序列,均是長度為N的不包含重復英文字母(區別大小寫)的字符串。

輸出格式:

輸出為一個整數,即該二叉樹的高度。

輸入樣例:

9 ABDFGHIEC FDHGIBEAC

輸出樣例:

5 作者:?DS課程組 單位:?浙江大學 時間限制:?400ms 內存限制:?64MB 代碼長度限制:?16KB

代碼:

#include<iostream> #include<string> using namespace std; string pre, mid; int n, num = -1; int gethigh(int start, int end) {num++;int i, j;for (i = start; i < end; i++)if (pre[num] == mid[i]) break;if (i == end) return 0;int left = 0, right = 0;if (start < i) left = gethigh(start, i);if (i + 1 < end) right = gethigh(i + 1, end);return left > right ? left + 1 : right + 1; } int main() {cin >> n;cin >> pre;cin >> mid;cout << gethigh(0, n) << endl; }
要求:根據樹的前序和中序確認后序

思路:首先我們要知道中序的意義,拿二叉搜索樹來舉例,對搜索樹進行中序遍歷并輸出,最后可以得到(由小到大)的有序數組。所以中序其實就相當于給每個元素從左往右標了序號,做過 二叉樹橫向輸出 的朋友應該知道,那題在輸出時要知道該節點是從左往右數的第幾個,然后才能算需要輸出幾個‘—’來保持樹狀。 簡而言之,中序就是橫向地給節點標記。

? ?其次,我們要知道前序的意義,前序的第一個節點一定是整棵樹的根節點。但是對于第二個節點,我們無法知道它是根節點的左子樹還是根節點的右子樹。

? ? ? ? ? ?假如前序的第一個節點 在 中序里排在第 5 個位置,而前序的第二個節點 排在中序的第 3 個位置,那么這時候,我們可以判定,第二個節點是第一個節點的左子樹。 結合上面的解釋應該可以自己理解了,如果還沒頓悟的話往下看。? 為什么呢? 因為對于第二個節點來說只有兩個可能:1.它是第一個節點的左子樹 2.它是第一個節點的右子樹。我們前面說過,中序是橫向地給樹標記,第二個節點的位置小于第一個,說明二在一的左邊。所以,這時候可以認定,它是一的左子樹。


我們可以結合樣例來看一看

num012345678?
preABDFGHIEC?
midFDHGIBEAC?

對num 從0到8 一一檢查:

0:確立根節點A,并在mid中找到A

1:在mid中找到B,如果 B <7,則為A的左子樹;如果 B>7,則B為A的右子樹。 B為5,A的左子樹。

2:在mid中找到D,如果D<5,則為B的左子樹,如果5<D<7,則為B的右子樹,如果D>7,則為A的右子樹。D=1,B的左子樹。

3:在mid中找到F,如果F<1,則為D的左子樹;

? ? ? ? ? ? ? ? ? ? ? ? 如果1<F<5,則為D的右子樹(B的左子樹是D,所以顯然不可能是B的左子樹);

? ? ? ? ? ? ? ? ? ? ? ?如果5<F<7,則為B的右子樹;

? ? ? ? ? ? ? ? ? ? ? ?如果7<F,則為A的右子樹;

4.以此類推。

這樣子推有沒有覺得特別繁瑣?要一個個判斷過去多累人啊! 上面的方法主要是給人判斷的,如果你要徒手畫,就是這個思路。 要用代碼實現的話,利用分治的思想,遞歸分解,把樹的規模一步步縮小,就能確認出二叉樹了。


上面講了這么多,其實并不需要把二叉樹完整的弄出來,做一個gethigh(int start,int end) 函數就行了。

start,end 是開始與結束的位置。比如確認了A后,左邊只要掃描[0,7),右邊只要掃描(7,8]。

left = gethigh(…,…)? ?體現的是 分治的思想

return 取兩邊大的那個再+1,如果左右都是空,就是返回1.

num放在了外面,確保每次都遞進一個搜索。開始做的時候,我把num作為形參,這樣導致left之后的num和right的num不同步,然后調試了半天 _(:з」∠)_





最后如果題目要求創建二叉樹并后序輸出

代碼:

#include<iostream> #include<string.h> #include<stdlib.h> #include<stdio.h> using namespace std; typedef char Element; struct Node {Element data;struct Node *lchild;struct Node *rchild; }; typedef struct Node BTNode; typedef struct Node * BTree; char pre[220]; char mid[220]; BTree creat(char *pre, char *in, int len) {BTree p = (BTree)malloc(sizeof(BTNode));if (len < 1)return NULL;int i = 0; //每次遞歸i都初始為0while (in[i] != pre[0])i++; //找出位置p->lchild = creat(pre + 1, in, i);p->rchild = creat(pre + i + 1, in + i + 1, len - i - 1);p->data = pre[0];return p; } void post(BTree root) {if (root){if (root->lchild)post(root->lchild);if (root->rchild)post(root->rchild);cout << root->data;} } int main() {BTree root;cin >> pre;cin >> mid;root = creat(pre, mid, strlen(pre));post(root);cout << endl; }





轉載于:https://www.cnblogs.com/childwang/p/8280274.html

總結

以上是生活随笔為你收集整理的前序中序确认二叉树 7-23 还原二叉树(25 分)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日韩欧美在线中文字幕 | 国产又黄又骚 | 日韩影院在线 | 国产freexxxx性播放麻豆 | 久久天堂视频 | 色九九 | 性少妇videosexfre | 亚洲AV无码成人片在线观看 | 播播网色播播 | 国产一区二区视频在线播放 | 欧美中文视频 | 亚洲AV成人无码精电影在线 | 禁断介护av | 五月婷婷综合在线观看 | 波多野吉衣久久 | 粉嫩av懂色av蜜臀av分享 | 国产精品无码久久久久久 | 二区三区在线观看 | 秋霞二区| 国产色播av在线 | 黑丝少妇喷水 | 亚洲黄色一区二区 | 亚洲av无码一区二区二三区软件 | 国产精品1页 | 久久精品99国产国产精 | 五号特工组之偷天换月 | 亚洲制服另类 | 欧美大片91 | 91视频免费看 | www日本黄色| 被黑人猛躁10次高潮视频 | 寡妇av| 不卡黄色 | a视频免费观看 | 色偷偷资源 | 日韩av图片| 精品视频在线免费看 | 51啪影院| 69人人 | 亚洲女同女同女同女同女同69 | 日本黄色大片视频 | 97精品在线| 男女视频免费网站 | 91九色porn| 中文字幕 视频一区 | 特a级黄色片 | 11一12免费毛片 | 裸体裸乳被免费看视频 | 蜜桃成熟时李丽珍在线观看 | 少妇高潮露脸国语对白 | 国产精品无码久久av | 久久精品国产亚洲av成人 | 日本欧美一区二区三区不卡视频 | 中文字幕日本人妻久久久免费 | 极品女神无套呻吟啪啪 | 国产在线一二三区 | 精品国产人妻一区二区三区 | 黄色小视频在线播放 | www日本色 | 另类捆绑调教少妇 | 亚洲综合图 | 国产精品9191 | 亚洲手机在线观看 | h亚洲| 森泽佳奈中文字幕 | 美女被啪羞羞粉色视频 | 人妻激情偷乱频一区二区三区 | 国产一级一级国产 | 天天干天天操 | 国产精品国产成人国产三级 | 男女在楼梯上高潮做啪啪 | 九色自拍 | 午夜影院私人 | 五月婷婷狠狠干 | 中文字幕精品一区二区精品 | www.国产视频.com | 女人脱下裤子让男人捅 | a级淫片 | 三级小视频在线观看 | www.久久爱 | 国产9区| 免费一级做a爰片久久毛片潮 | 中文字幕无码精品亚洲 | 黄色羞羞网站 | 欧美大胆视频 | 日韩欧美在线精品 | 久久久国产精品一区 | 亚洲精品乱码久久久久久不卡 | 天天做天天摸天天爽天天爱 | 成人片片 | 99er久久 | 中文在线观看免费视频 | 原创av | 午夜久| 一级大片免费 | 日日躁夜夜躁狠狠久久av | a在线观看视频 | a毛片成人 | 三级全黄做爰龚玥菲在线 |