当前位置: 首页 > news >正文

二叉树习题之重建二叉树

       对于给定前序和中序的重建方法。

      1 前序的第一个元素一定是树的根节点,在中序集合中找到此元素,那么该元素的左面即为根的左子树,右面为右子树。

      2 找到前序的第二个元素,重复上面的步骤。

      自写程序的效率大概为 n*n/2 或最大的那个元素(这点很坑,斟酌改掉), 目前没发现更快的写法(自己写)

      结果以连续内存的数组形式存储。

     

#include<cstdio>
#include<iostream>

using namespace std;

int tree[200];
void reset(int f[],int l,int m[])
{
    int *t = tree;
    int vis[200];
    int x;
    for(x=1;x<99;x+=3)
    {
        vis[x]=1;
        vis[x+1]=1;
        vis[x+2]=1;
    }
    for(;x<100;x++)
        vis[x]=1;
    int len=0,val=0;
    int temp;
    x=0;
    for(int i=0;i<l;i++)
    {
        len=0;
        temp = f[i];
        x = x>temp?x:temp;
        val=vis[temp];
        while(m[len++]!=temp);
        len--;
        for(int k=len-1;k>=0;k--)
        {
            temp = m[k];
            if(vis[temp]<val) break;
            vis[temp]=val<<1;
        }
        for(int j=len+1;j<l;j++)
        {
            temp = m[j];
            if(vis[temp]<val) break;
            vis[temp]=(val<<1)+1;
        }
    }
    t[1]=f[0];
    for(int i=1;i<=x;i++)
    {
        if(vis[i]==1) continue;
        temp=vis[i];
        t[temp]=i;
    }
}
int main()
{
    int f[100];
    int m[100];
    int a;
    cin>>a;
    for(int i=0;i<a;i++)
        cin>>f[i];
    for(int j=0;j<a;j++)
        cin>>m[j];
    reset(f,a,m);
    return 0;

}
/*
8
1 2 4 7 3 5 6 8
4 7 2 1 5 3 8 6
9
1 2 4 8 9 5 3 6 7
8 4 9 2 5 1 6 3 7
*/

   其他情况待研究。

转载于:https://www.cnblogs.com/liboyan/p/5033971.html

相关文章:

  • WebView的简单入门
  • 持续集成
  • Android开发Eclipse连接真机
  • 吐槽贴-微信公众号那些让人想起神兽的坑
  • No orientation specified, and the default is horizontal.
  • Java代码实现随机生成汉字
  • (转)负载均衡,回话保持,cookie
  • js跨域及解决方案
  • Daily Scrumming* 2015.12.13(Day 5)
  • WebApp之JQuery Mobile实现火车列表信息查询
  • 用Unity写一个12306验证器的恶搞图生成软件
  • 高仿微信5.2.1主界面及消息提醒功能
  • 自定义DialogAlert对话框并实现对话框的复用
  • webservice作用(优,缺点;作用)
  • 如何修改Eclipse的背景颜色
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • gcc介绍及安装
  • golang中接口赋值与方法集
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Python学习之路16-使用API
  • v-if和v-for连用出现的问题
  • Vue.js 移动端适配之 vw 解决方案
  • 前端代码风格自动化系列(二)之Commitlint
  • 使用权重正则化较少模型过拟合
  • 手写一个CommonJS打包工具(一)
  • ​渐进式Web应用PWA的未来
  • ​学习一下,什么是预包装食品?​
  • ​用户画像从0到100的构建思路
  • # Panda3d 碰撞检测系统介绍
  • (Oracle)SQL优化技巧(一):分页查询
  • (八十八)VFL语言初步 - 实现布局
  • (实战篇)如何缓存数据
  • (一一四)第九章编程练习
  • (转)c++ std::pair 与 std::make
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net 7 上传文件踩坑
  • .NET CLR基本术语
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET 药厂业务系统 CPU爆高分析
  • /3GB和/USERVA开关
  • @Controller和@RestController的区别?
  • @Not - Empty-Null-Blank
  • [bug总结]: Feign调用GET请求找不到请求体实体类
  • [BZOJ5250][九省联考2018]秘密袭击(DP)
  • [C++]类和对象(中)
  • [caffe(二)]Python加载训练caffe模型并进行测试1
  • [Excel]如何找到非固定空白格數列的條件數據? 以月份報價表單為例
  • [HNOI2008]水平可见直线
  • [js] 正则表达式
  • [Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用
  • [LOJ 6213]「美团 CodeM 决赛」radar
  • [NOIP2003 普及组] 乒乓球(模拟)
  • [NOIP2018 PJ T4]对称二叉树
  • [one_demo_14]一个简单的easyui的demo