4-14 還原二叉樹 (15分)
4-14 還原二叉樹 (15分)
給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。
輸入格式:
輸入首先給出正整數N(≤50),為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為N的不包含重複英文字母(區別大小寫)的字串。
輸出格式:
輸出為一個整數,即該二叉樹的高度。
輸入樣例:
9
ABDFGHIEC
FDHGIBEAC
輸出樣例:
5
Code:
使用兩個板子:先序和中序建樹+求高度
先序和中序建樹板子理解BTree buildtree(int root,int start,int end)
:
先序(根左右)最先出現的總是根結點,
root
為當前先序的根結點下標(根據當前的中序序列可以把當前的中序分為左根右)
start
為當前中序序列起始位置
end
為當前中序序列結束位置
k
為當前中序序列的根結點位置,分割當前中序序列左右子樹的下標
#include<bits/stdc++.h>
using namespace std;
typedef struct btnode{
char data;
struct btnode *left,*right;
}btnode,*BTree;
vector<char> pre,in;
BTree buildtree(int root,int start,int end){
if(start>end) return NULL;
int k;
for(k=start;k<end;k++) if(in[k]==pre[root]) break;
BTree node = (BTree)malloc(sizeof(btnode));
node->data = pre[root];
node->left = buildtree(root+1,start,k-1);
//當前中序序列的左子樹,root+1為當前中序左子樹的根結點位置
node->right = buildtree(root+1+k-start,k+1,end);
//當前中序序列的右子樹,root+1為當前中序左子樹的根結點位置,k-start為當前中序序列左子樹的個數,相加為當前中序序列右子樹的根結點位置
return node;
}
int getHeight(BTree bt){
if(!bt) return 0;
int left = getHeight(bt->left);
int right = getHeight(bt->right);
return max(left,right)+1;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int N;
scanf("%d",&N);getchar();
pre.resize(N);
in.resize(N);
for(int i=0;i<N;i++) scanf("%c",&pre[i]);
getchar();
for(int i=0;i<N;i++) scanf("%c",&in[i]);
BTree t = buildtree(0,0,N-1);
cout << getHeight(t);
return 0;
}
相關文章
- 還原二叉樹(先序+中序-〉後序)二叉樹
- 平衡二叉樹(AVL樹),原來如此!!!二叉樹
- 根據二叉樹的先序序列和中序序列還原二叉樹並列印後序序列二叉樹
- 5分鐘瞭解二叉樹之二叉查詢樹二叉樹
- DAY 15 二叉樹part03二叉樹
- 5分鐘瞭解二叉樹之AVL樹二叉樹
- 【java 資料結構】還不會二叉樹?一篇搞定二叉樹Java資料結構二叉樹
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- Day15 二叉樹Part2 初見回溯(二叉樹相關)二叉樹
- 5分鐘瞭解二叉樹之LeetCode裡的二叉樹二叉樹LeetCode
- P2015 二叉蘋果樹蘋果
- 二叉樹 & 二叉查詢樹二叉樹
- 1501 二叉樹最大寬度和高度二叉樹
- 排序二叉樹和平衡二叉樹排序二叉樹
- 二叉查詢樹(二叉排序樹)排序
- 二叉樹(順序儲存二叉樹,線索化二叉樹)二叉樹
- 手擼二叉樹——二叉查詢樹二叉樹
- 手擼二叉樹——AVL平衡二叉樹二叉樹
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- 二叉樹二叉樹
- 二叉樹的應用(1)--二叉樹排序樹基本操作二叉樹排序
- 判斷二叉樹是否為滿二叉樹二叉樹
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- 自己動手作圖深入理解二叉樹、滿二叉樹及完全二叉樹二叉樹
- 二叉樹、B樹以及B+樹二叉樹
- 平衡二叉樹,B樹,B+樹二叉樹
- day 15|二叉樹part03|110.平衡二叉樹|257. 二叉樹的所有路徑|404.左葉子之和| 222.完全二叉樹的節點個數二叉樹
- 深入學習二叉樹 (一) 二叉樹基礎二叉樹
- 相同二叉樹和鏡面二叉樹問題二叉樹
- 判斷某棵二叉樹是否二叉排序樹二叉樹排序
- 平衡二叉樹(AVL樹)和 二叉排序樹轉化為平衡二叉樹 及C語言實現二叉樹排序C語言
- 樹和二叉樹簡介二叉樹
- n叉樹vs二叉樹二叉樹
- Chapter 3 樹與二叉樹APT二叉樹
- 二叉樹的遍歷 → 不用遞迴,還能遍歷嗎二叉樹遞迴
- 樹(2)--二叉樹的遍歷(非遞迴)+線索二叉樹二叉樹遞迴
- 迭代二叉樹二叉樹
- 二叉樹深度二叉樹