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樹),原來如此!!!二叉樹
- 【java 資料結構】還不會二叉樹?一篇搞定二叉樹Java資料結構二叉樹
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- 排序二叉樹和平衡二叉樹排序二叉樹
- 二叉樹(順序儲存二叉樹,線索化二叉樹)二叉樹
- 手擼二叉樹——AVL平衡二叉樹二叉樹
- 手擼二叉樹——二叉查詢樹二叉樹
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- 二叉樹二叉樹
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹
- 判斷二叉樹是否為滿二叉樹二叉樹
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- 自己動手作圖深入理解二叉樹、滿二叉樹及完全二叉樹二叉樹
- 二叉樹、B樹以及B+樹二叉樹
- 平衡二叉樹,B樹,B+樹二叉樹
- 平衡二叉樹(AVL樹)和 二叉排序樹轉化為平衡二叉樹 及C語言實現二叉樹排序C語言
- 相同二叉樹和鏡面二叉樹問題二叉樹
- 深入學習二叉樹 (一) 二叉樹基礎二叉樹
- 樹和二叉樹簡介二叉樹
- Chapter 3 樹與二叉樹APT二叉樹
- n叉樹vs二叉樹二叉樹
- 二叉樹的遍歷 → 不用遞迴,還能遍歷嗎二叉樹遞迴
- 重建二叉樹二叉樹
- 二叉樹深度二叉樹
- 迭代二叉樹二叉樹
- javascript二叉樹JavaScript二叉樹
- 12、二叉樹二叉樹
- 滿二叉樹二叉樹
- 平衡二叉樹二叉樹
- Java二叉樹Java二叉樹
- 二叉樹---深度二叉樹
- 二叉樹的子結構、深度以及重建二叉樹二叉樹
- js實現完全排序二叉樹、二叉搜尋樹JS排序二叉樹
- 二叉搜尋樹和二叉樹的最近公共祖先二叉樹
- 資料結構(樹):二叉樹資料結構二叉樹
- C++樹——遍歷二叉樹C++二叉樹
- JavaScript 二叉搜尋樹以及實現翻轉二叉樹JavaScript二叉樹