《算法筆記》9.2小節——數據結構專題(2)->二叉樹的遍歷 問題 A: 復原二叉樹(同問題 C: 二叉樹遍歷)

題目描述

小明在做數據結構的作業,其中一題是給你一棵二叉樹的前序遍歷和中序遍歷結果,要求你寫出這棵二叉樹的后序遍歷結果。

輸入

輸入包含多組測試數據。每組輸入包含兩個字符串,分別表示二叉樹的前序遍歷和中序遍歷結果。每個字符串由不重復的大寫字母組成。

輸出

對于每組輸入,輸出對應的二叉樹的后續遍歷結果。

樣例輸入
DBACEGF ABCDEFG
BCAD CBAD
樣例輸出
ACBFGED
CDAB

分析:不建樹直接找的方法。

#include<algorithm>
#include <iostream>
#include  <cstdlib>
#include  <cstring>
#include   <string>
#include   <vector>
#include   <cstdio>
#include    <queue>
#include    <stack>
#include    <ctime>
#include    <cmath>
#include      <map>
#include      <set>
#define ll long long
#define INF 0x3f3f3f3f
#define db1(x) cout<<#x<<"="<<(x)<<endl
#define db2(x,y) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<endl
#define db3(x,y,z) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<endl
#define db4(x,y,z,a) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<", "<<#a<<"="<<(a)<<endl
using namespace std;char preorder[1100],midorder[1100],lastorder[1100];void getlastorder(char pre[],char mid[],int n)
{int t;if(n<=0)return;for(t=0;t<n;++t)if(mid[t]==pre[0])break;getlastorder(pre+1,mid,t);getlastorder(pre+t+1,mid+t+1,n-t-1);printf("%c",pre[0]);
}int main(void)
{#ifdef testfreopen("in.txt","r",stdin);
//    freopen("in.txt","w",stdout);clock_t start=clock();#endif //testwhile(~scanf("%s%s",preorder,midorder)){getlastorder(preorder,midorder,strlen(preorder));printf("\n");}#ifdef testclockid_t end=clock();double endtime=(double)(end-start)/CLOCKS_PER_SEC;printf("\n\n\n\n\n");cout<<"Total time:"<<endtime<<"s"<<endl;        //s為單位cout<<"Total time:"<<endtime*1000<<"ms"<<endl;    //ms為單位#endif //testreturn 0;
}

建樹再后序遍歷的方法:由于前序遍歷是先遍歷根節點,因此前序遍歷的第一個點一定是根節點。再到中序遍歷中找到根節點的位置,這之前都是左子樹,這之后都是右子樹。知道左右子樹長度之后,就可以在前序遍歷中找到左右子樹。這樣遞歸地建立二叉樹,最后輸出后序遍歷結果。

#include    <algorithm>
#include     <iostream>
#include      <cstdlib>
#include      <cstring>
#include       <string>
#include       <vector>
#include       <cstdio>
#include        <queue>
#include        <stack>
#include        <ctime>
#include        <cmath>
#include          <map>
#include          <set>
#include<unordered_map>
#define INF 0x3f3f3f3f
#define db1(x) cout<<#x<<"="<<(x)<<endl
#define db2(x,y) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<endl
#define db3(x,y,z) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<endl
#define db4(x,y,z,a) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<", "<<#a<<"="<<(a)<<endl
#define db5(x,y,z,a,r) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<", "<<#a<<"="<<(a)<<", "<<#r<<"="<<(r)<<endl
using namespace std;typedef struct node
{char val;struct node *left,*right;
}node;void Free(node *root)
{if(root->left!=NULL)Free(root->left);if(root->right!=NULL)Free(root->right);free(root);return;
}node *get_tree(char *pre,int pre_l,int pre_r,char *mid,int mid_l,int mid_r)
{if(pre_l>=pre_r)return NULL;node *p=(node *)malloc(sizeof(node));p->val=pre[pre_l];int index=0;for(index=mid_l;index<mid_r;++index)if(mid[index]==pre[pre_l])break;p->left=get_tree(pre,pre_l+1,pre_l+1+index-mid_l,mid,mid_l,index);p->right=get_tree(pre,pre_l+1+index-mid_l,pre_r,mid,index+1,mid_r);return p;
}void last_order(node *root)
{if(root==NULL)return;last_order(root->left);last_order(root->right);printf("%c",root->val);return;
}int main(void)
{#ifdef testfreopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);clock_t start=clock();#endif //testchar pre[100000],mid[100000];while(~scanf("%s%s",pre,mid)){int len=strlen(pre);node *root=get_tree(pre,0,len,mid,0,len);last_order(root);printf("\n");Free(root);}#ifdef testclockid_t end=clock();double endtime=(double)(end-start)/CLOCKS_PER_SEC;printf("\n\n\n\n\n");cout<<"Total time:"<<endtime<<"s"<<endl;        //s為單位cout<<"Total time:"<<endtime*1000<<"ms"<<endl;    //ms為單位#endif //testreturn 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73868.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73868.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73868.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringBoot-2整合MyBatis以及基本的使用方法

目錄 1.引入依賴 2.數據庫表的創建 3.數據源的配置 4.編寫pojo類 5.編寫controller類 6.編寫接口 7.編寫接口的實現類 8.編寫mapper 1.引入依賴 在pom.xml引入依賴 <!-- mysql--><dependency><groupId>com.mysql</groupId><artifac…

Unity Shader Graph高級節點邏輯設計:程序化噪聲生成技術詳解

一、程序化噪聲的核心價值 程序化噪聲生成是Shader開發中的關鍵核心技術&#xff0c;通過數學算法直接生成紋理信息&#xff0c;相較于傳統位圖紋理具有以下優勢&#xff1a; 無限分辨率&#xff1a;可動態適應任意顯示精度 參數化控制&#xff1a;實時調整噪聲頻率、振幅等屬…

[藍橋杯 2023 省 B] 飛機降落(不會dfs的看過來)

[藍橋杯 2023 省 B] 飛機降落 題目描述 N N N 架飛機準備降落到某個只有一條跑道的機場。其中第 i i i 架飛機在 T i T_{i} Ti? 時刻到達機場上空&#xff0c;到達時它的剩余油料還可以繼續盤旋 D i D_{i} Di? 個單位時間&#xff0c;即它最早可以于 T i T_{i} Ti? 時刻…

英偉達GTC 2025大會產品全景剖析與未來路線深度洞察分析

【完整版】3月19日&#xff0c;黃仁勛Nvidia GTC 2025 主題演講&#xff5c;英偉達 英偉達GTC 2025大會產品全景剖析與未來路線深度洞察分析 一、引言 1.1 分析內容 本研究主要采用了文獻研究法、數據分析以及專家觀點引用相結合的方法。在文獻研究方面&#xff0c;廣泛收集了…

強化學習 - PPO控制無人機

PPO&#xff08;Proximal Policy Optimization&#xff0c;近端策略優化&#xff09;是一種強化學習算法&#xff0c;用于訓練智能體&#xff08;無人機&#xff09;如何在環境中做出決策。它本質上是 策略梯度&#xff08;Policy Gradient&#xff09;方法 的一種改進&#xf…

YOLO11報錯:AttributeError: module ‘torch‘ has no attribute ‘OutOfMemoryError‘

事情是這樣的&#xff1a;前幾天YOLO11的代碼還是可以訓練的&#xff0c;昨天訓練了一天&#xff0c;今天換模型就報這個錯。 AttributeError: module torch has no attribute OutOfMemoryError我查了一下&#xff1a;YOLO11官方代碼issues里面也有人有同樣的問題&#xff0c;…

Prometheus使用

介紹&#xff1a;Prometheus 是一個開源的 監控與告警系統&#xff0c;主要用于采集和存儲時間序列數據&#xff08;Time Series Data&#xff09; Prometheus的自定義查詢語言PromQL Metric類型 為了能夠幫助用戶理解和區分這些不同監控指標之間的差異&#xff0c;Prometheu…

ESG報告評級標準解讀

ESG&#xff08;環境、社會、治理&#xff09;報告評級標準用于評估企業在環境、社會和公司治理方面的表現。以下是主要評級標準的解讀&#xff1a; 1. 環境&#xff08;Environmental&#xff09; 碳排放&#xff1a;評估企業的溫室氣體排放及減排措施。 能源使用&#xff1…

清晰易懂的 PHP 安裝與配置教程

初學者也能看懂的 PHP 安裝與配置教程 本教程將手把手教你如何在 Windows 系統上安裝 PHP&#xff0c;并配置 Composer&#xff08;PHP 的依賴管理工具&#xff09;的緩存位置&#xff0c;即使你是零基礎小白&#xff0c;也能輕松完成&#xff01; 一、準備工作 操作系統&…

Zabbix監控自動化(Zabbix Mnitoring Automation)

??????zabbix監控自動化 1、自動化監控(網絡發現與自動注冊只能用其一) 1.1 ansible安裝zabbix agent 新采購100臺服務器&#xff1a; 1、安裝操作系統 2、初始化操作系統 3、安裝zabbix agent 1.手動部暑 2.腳本部暑(shell expect) 3.ansible 4、納入監控 1.…

Android Launcher3 首屏圖標鎖定技術方案解析

一、需求背景與技術挑戰 在Android 13系統定制開發中&#xff0c;需實現Launcher首屏圖標固定功能。該需求需在以下技術維度進行突破&#xff1a; 拖拽事件攔截機制&#xff1a;需精準識別拖拽目標區域 布局層級判定&#xff1a;準確識別第一屏的布局標識 跨屏操作限制&…

Spring Framework 中 BeanDefinition 是什么

BeanDefinition 是 Spring Framework 中一個核心的接口&#xff0c;它描述了一個 Bean 的定義。你可以把它看作是 Spring IoC 容器中 Bean 的“藍圖”或“配置元數據”。它包含了 Spring 容器創建、配置和管理 Bean 所需的所有信息。 BeanDefinition 中包含的信息&#xff1a;…

QtCreator16創建WebAssembly工程在瀏覽器中顯示圖片

顯示效果&#xff1a; 實現過程&#xff1a; 添加qrc資源文件 輸入文件名&#xff1a; 選擇模板為Qt Resource File 在工程目錄下創建res文件夾&#xff0c;復制圖片文件到res中 編輯qrc文件 添加資源前綴 添加圖片資源 選擇圖片資源添加別名 復制資源URL 使用別名調用資源 居…

openpnp - 如果安裝面的鈑金接觸面不平,可以嘗試加墊片

文章目錄 openpnp - 如果安裝面的鈑金接觸面不平&#xff0c;可以嘗試加墊片概述吐槽備注END openpnp - 如果安裝面的鈑金接觸面不平&#xff0c;可以嘗試加墊片 概述 在X軸導軌上&#xff0c;架上百分表&#xff0c;打設備的工作平面的平面度&#xff0c;發現工作平面不平(和…

人工智能之數學基礎:線性方程組

本文重點 線性方程組是由兩個或兩個以上的線性方程組成的方程組,其中每個方程都是關于兩個或兩個以上未知數的線性方程。 記憶恢復 我們先從小學學習的線性方程組找到感覺 解答過程: 將第二個方程乘以2,得到: 2x?2y=2 將第一個方程減去新得到的方程,消去x: (2x+y)?…

DeepSeek-R1思路訓練多模態大模型-Vision-R1開源及實現方法思路

剛開始琢磨使用DeepSeek-R1風格訓練多模態R1模型&#xff0c;就看到這個工作&#xff0c;本文一起看看&#xff0c;供參考。 先提出問題&#xff0c;僅靠 RL 是否足以激勵 MLLM 的推理能力&#xff1f; 結論&#xff1a;不能&#xff0c;因為如果 RL 能有效激勵推理能力&#…

鴻蒙NEXT項目實戰-百得知識庫04

代碼倉地址&#xff0c;大家記得點個star IbestKnowTeach: 百得知識庫基于鴻蒙NEXT穩定版實現的一款企業級開發項目案例。 本案例涉及到多個鴻蒙相關技術知識點&#xff1a; 1、布局 2、配置文件 3、組件的封裝和使用 4、路由的使用 5、請求響應攔截器的封裝 6、位置服務 7、三…

免密登錄遠程服務器shell腳本

一、腳本代碼 #!/bin/bash #提示用戶輸入用戶i名和ip地址 read -p "請輸入遠程服務器的用戶名: " hname read -p "請輸入遠程服務器的IP地址: " fip read -p "請輸入遠程服務器的遠程端口:" sdk #檢查是否配置了免密登錄 function sfmm(){ …

WiFi 定位技術:守護寵物安全的隱形衛士

一、實時追蹤&#xff0c;防患未然 想象一下&#xff0c;活潑好動的貓咪趁你開門瞬間溜出家門&#xff0c;穿梭在樓道雜物間&#xff1b;或是狗狗在戶外玩耍時&#xff0c;被突發聲響驚嚇狂奔&#xff0c;瞬間沒了蹤影。在這些令人揪心的時刻&#xff0c;WiFi 定位技術就像給寵…

《C#上位機開發從門外到門內》3-2::Modbus數據采集系統

文章目錄 **1. 項目概述****1.1 項目背景****1.2 項目目標****1.3 技術棧** **2. 系統架構設計****2.1 系統架構圖****2.2 模塊功能** **3. 數據采集模塊實現****3.1 Modbus協議簡介****3.2 數據采集流程****3.3 代碼實現** **4. 數據存儲模塊實現****4.1 數據庫設計****4.2 數…