美文网首页
二叉树重构

二叉树重构

作者: 农民工__乔Young | 来源:发表于2017-09-21 17:26 被阅读0次

已知前序中序求后序

//Tree Recovery
#include <iostream>
#include <string>
using namespace std;



void PostOrder(int pre[], int in[], int post[], int left, int right, int&pos, int&index);//构建后序遍历序列
void input(int a[], const int n, string s);//输入
void output(int a[], const int n);//输出
int find(int a[], int left, int right, const int e);//在中序序列中找与先序序列对应的元素的位置

int main()
{
    int length;//序列长度
    int pos = 0;//序列查找的位置
    int index = 0;//构建后序序列的下标
    cout << "length:";
    cin >> length;

    int* in = new int[length];
    int*pre = new int[length];
    int*post = new int[length];

    input(pre, length, "PreOrder:");
    input(in, length, "InOrder:");

    PostOrder(pre, in, post, 0, length - 1, pos, index);
    output(post, length);

    return 0;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void PostOrder(int pre[], int in[], int post[], int left, int right, int&pos, int&index)
{
    if (left > right)//节点不存在
    {
        return;
    }
    int i = find(in, left, right, pre[pos++]);//查找
    if (i == right && right == left)//叶子结点
    {
        post[index++] = in[i];//加入后续遍历序列中
        return;
    }
    PostOrder(pre, in, post, left, i - 1, pos, index);//递归左子树
    PostOrder(pre, in, post, i + 1, right, pos, index);//递归右子树
    post[index++] = in[i];//插入根节点
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

void input(int a[], const int n, string s)
{
    cout << s;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
}
void output(int a[], const int n)
{
    cout << "PostOrder:";
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
    cout << endl;
}
int find(int a[], int left, int right, const int e)
{
    for (int i = left; i <= right; i++) {
        if (e == a[i])
            return i;
    }
    return 0;
}

相关文章

  • 二叉树code

    二叉树遍历 前序,中序,后序任选两个重构二叉树

  • 根据前序、中序遍历重构二叉树

    定义节点类型 重构二叉树 测试 分析 前序遍历:12473568中序遍历:47215386 重构过程: 前序遍历中...

  • 重构二叉树

    重构二叉树 题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中...

  • 数据结构与算法之二叉树遍历(七)

    目录 前序遍历中序遍历后序遍历层序遍历遍历方式的选择条件根据遍历结果重构二叉树翻转二叉树计算二叉树的高度判断一棵树...

  • 栈-N331-验证二叉树的前序序列化

    题目 概述:给定二叉树的前序遍历列表,判断它是否是合理的要求:不能重构树 输入:二叉树的前序遍历字符串,用","分...

  • 重构二叉树

    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例...

  • 重构二叉树

    原文链接:http://blog.csdn.net/qq_22329521/article/details/529...

  • 二叉树重构

    已知前序中序求后序

  • 1.重构二叉树 题解:相对于跟节点对位置,可以分为: 前序遍历(根左右) 中序遍历(左根右) 后续遍历(左右根) ...

  • 代码重构专题(转载)

    代码重构(一):函数重构规则代码重构(二):类重构规则代码重构(三):数据重构规则代码重构(四):条件表达式重构规...

网友评论

      本文标题:二叉树重构

      本文链接:https://www.haomeiwen.com/subject/uhltextx.html