数据结构与算法-7-23 还原二叉树

发布于 / 刷题 / 0 条评论

给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。

输入格式:

输入首先给出正整数N(50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。

输出格式:

输出为一个整数,即该二叉树的高度。

输入样例:

9
ABDFGHIEC
FDHGIBEAC

输出样例:

5

二叉树序列转换,请点击这里:https://www.mmuaa.com/post/ee2b491b9925cb5a.html

代码如下:

#include <cstdio>
#include <algorithm>
#include <queue>
#define MAXN 51
using namespace std;
typedef struct _node{
    char data;
    _node *lchild, *rchild;
    int layer;
} node;

char preorder[MAXN], inorder[MAXN];
int n;

node* create(int preL, int preR, int inL, int inR){
    if(preL > preR) return NULL;
    //计算偏移量
    int root_index = find(inorder, inorder + n, preorder[preL]) - inorder,
        length_lchild = root_index - inL;
    int new_L_preL = preL + 1,
        new_L_preR = preL + length_lchild,
        new_L_inL = inL,
        new_L_inR = root_index - 1;
    int new_R_preL = new_L_preL + length_lchild,
        new_R_preR = preR,
        new_R_inL = root_index + 1,
        new_R_inR = inR;
    //写根节点
    node* root = new node;
    root->data = preorder[preL];
    //递归建树
    root->lchild = create(new_L_preL, new_L_preR, new_L_inL, new_L_inR);
    root->rchild = create(new_R_preL, new_R_preR, new_R_inL, new_R_inR);
    return root;
}

int layerorder(node* root){
    queue<node*> Q;
    root->layer = 1;
    int max_layer = 0;
    Q.push(root);
    while(!Q.empty()){
        node* iter = Q.front();
        Q.pop();
        if(iter->layer > max_layer) max_layer = iter->layer;
        if(iter->lchild){
            iter->lchild->layer = iter->layer + 1;
            Q.push(iter->lchild);
        }
        if(iter->rchild){
            iter->rchild->layer = iter->layer + 1;
            Q.push(iter->rchild);
        }
    }
    return max_layer;
}

int main(){
    scanf("%d", &n);
    getchar();  //吸收回车
    for(int i = 0; i < n; i++)
        scanf("%1c", &preorder[i]);
    getchar();  //吸收回车
    for(int i =0; i < n; i++)
        scanf("%1c", &inorder[i]);
    node* root = create(0, n-1, 0, n-1);
    printf("%d\n", layerorder(root));
    return 0;
}

转载原创文章请注明,转载自: 斐斐のBlog » 数据结构与算法-7-23 还原二叉树
目前还没有评论,快来抢沙发吧~