• 前序和中序转换成二叉树


    #include<iostream>
    #include<iomanip>
    #include<list>
    #include<cmath>
    #include<vector>
    #include<assert.h>
    #include"Test.h"
    using namespace std;
    struct Node
    {
        int data;
        Node *left;
        Node *right;
    };
    int pre[]={1,2,4,7,3,5,6,8};
    int mid[]={4,7,2,1,5,3,8,6};
    
    Node *f(int pre[],int a,int b,int mid[],int m,int n)
    {
        if(b-a+1!=n-m+1)
            throw std::exception("Invalid input!");
        if(a>b||m>n)
            return NULL;
        int i;
        Node *p=NULL;
        for(i=m;i<=n;i++)
        {
            if(mid[i]==pre[a])
            {
                p=new Node();
                p->data=mid[i];
                p->left=f(pre,a+1,a+i-m,mid,m,i-1);
                p->right=f(pre,a+i-m+1,b,mid,i+1,n);
                return p;
            }
        }
        throw std::exception("Invalid input!");
    }
    Node *Construct(int pre[],int m,int mid[],int n)
    {
        if(pre==NULL||mid==NULL||m!=n||m<0)
            throw std::exception("Invalid Input");
        return f(pre,0,m-1,mid,0,n-1);
    }
    
    Node *t;
    void main()
    { 
        try
        {
            t=Construct(pre,8,mid,8);
        }
        catch(std::exception e)
        {
            cout<<e.what()<<endl;
        }
        int a;
    
        system("pause");
    }
  • 相关阅读:
    价格与用户权限
    bootstrap-validator
    关于项目管理的感想
    rabbitmq使用日记
    matplotlib
    JS滑动到页面底部
    排序算法思想
    杀死指定进程
    pycharm的一些快捷键
    对支付宝支付的理解
  • 原文地址:https://www.cnblogs.com/dyc0113/p/3207629.html
Copyright © 2020-2023  润新知