首页 > 其他分享 >树 Tree uva548

树 Tree uva548

时间:2023-12-19 11:01:09浏览次数:24  
标签:node int sum Tree pos uva548 NULL root

原题链接

高中信息题就有给你中序遍历和后序遍历让你求前序遍历的题目。这道题就是根据这两个遍历创建出对应的树,然后根据DFS(深度优先搜索)去求出最小路径。

主要代码:

#include<bits/stdc++.h>
using namespace std;
const int Max=10000+10;
int in_node[Max],last_node[Max],cnt=0;
struct node{
    int v;
    node *left,*right;
    node ():left(NULL),right(NULL){}
};
bool input(int a[]){  //中序遍历和后序遍历的读入 
    string s;
    if (!getline(cin,s)) return false;
    stringstream ss(s);
    cnt=0;
    int x;
    while (ss>>x) a[cnt++]=x;
    return true;
}
node* creat_tree(int l1,int r1,int l2,int r2){  //树的创建 
    if (l1>r1 || l2>r2) return NULL;  //边界条件 
    node *root=new node;
    root->v=last_node[r2];  //找到当前子树的根结点 
    int pos=0;
    while (in_node[pos]!=last_node[r2]) pos++;  //从中序遍历中找出该结点位置 
    root->left=creat_tree(l1,pos-1,l2,l2+pos-l1-1);  //左子树的创建 
    root->right=creat_tree(pos+1,r1,l2+pos-l1,r2-1);  //右子树的创建 
    return root;
}
int min_node=0,Min=0;
void dfs(node *root,int sum){  //DFS搜索 
    sum+=root->v;
    if (root->left==NULL && root->right==NULL){  //是叶子结点 
        if (min_node==0 && Min==0){min_node=root->v;Min=sum;}
        else if(sum<Min || (sum==Min && min_node>(root->v))){min_node=root->v;Min=sum;}
    }
    if (root->left!=NULL) dfs(root->left,sum);
    if (root->right!=NULL) dfs(root->right,sum);
}
int main(){
    while (input(in_node)){
        input(last_node);
        node *root=creat_tree(0,cnt-1,0,cnt-1);
        min_node=0,Min=0;
        dfs(root,0);
        cout<<min_node<<endl;
    }
    return 0;
}

 

标签:node,int,sum,Tree,pos,uva548,NULL,root
From: https://www.cnblogs.com/purple123/p/17913206.html

相关文章

  • TreeMap
    一文带你全面深入了解TreeMap_对奶茶过敏的博客-CSDN博客TreeMap基本使用_菩提小猿的博客-CSDN博客......
  • TreeMap
    一文带你全面深入了解TreeMap_对奶茶过敏的博客-CSDN博客TreeMap基本使用_菩提小猿的博客-CSDN博客......
  • unigui显示uniTreeVview使用TUniTreeNode内存泄漏的问题【14】
    uniTreeVviewc创建一个tree,显示患者姓名(PatientName)。因为需要用到患者ID(PatientID),所以使用help:TPatientTreeNode=class(TUniTreeNode)//strictprivateFPatientID:string;functionGetPatientID:string;procedureSetPatientID(constValue:string)......
  • C++ Qt开发:Tab与Tree组件实现分页菜单
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍tabWidget选择夹组件与TreeWidget树形选择组件,的常用方法及灵活运用。1.1TabWidgetQTabWidget......
  • 解决element-ui中el-tree懒加载load只执行一次问题
    在我们实际开发中,由于后端返回的节点数据量庞大,而用户往往没有要看到所有数据的需求,如果在页面加载中,将页面的所有节点数据都加载出来,无疑是浪费用户宝贵的时间,因此,就有了节点的懒加载的需求,用户想展开哪个节点,我们就给他展示什么数据(异步的从后台发送请求获取当前节点数据然后进......
  • npm 安装是一直卡在idealTree:npm:sill idealTree buildDeps无反应
    最近npminstall下载依赖出现一直卡在idealTree:npm:sillidealTreebuildDeps,最后出现requesttohttps://registry.npmjs.org/simple-zustand-devtoolsfailed,reason:connectETIMEDOUT104.16.3.35:443连接超时?于是ping registry.npmjs.org下这个网站是能够正常连接的,......
  • 无涯教程-MFC - Tree Control函数
    TreeViewControl是一个窗口,其中显示项目的层次结构列表,例如文档中的标题,索引中的条目或磁盘上的文件和目录,每个项目都包含一个标签和一个可选的位图图像,并且每个项目都可以具有与其相关联的子项目列表,通过单击一个项目,用户可以展开和折叠子项目的关联列表,它由CTreeCtrl类表......
  • CF1904E Tree Queries
    给定一棵\(n\)个节点的树与\(q\)次询问,每次询问给出一个\(x\)与一个大小为\(k\)的点集\(a\),要求求出在删去了\(a\)中的点后从\(x\)出发的最长简单路径的长度。每次询问独立。\(n,q,\sumk\le2\times10^5\)。一些记号:\(p_i\)表示时间戳\(i\)对应的节点......
  • AT_cf17_final_j Tree MST 题解
    题意:给定一颗\(n\)个点的树,点\(i\)有权值\(a_{i}\),边有边权。现在有另外一个完全图,两点之间的边权为树上两点之间的距离加上树上两点的点权,求这张完全图的最小生成树。首先有一个很显然的暴力,把完全图中每两点之间的边权算出来,然后跑一边最小生成树,时间复杂度\(O(n^{2}\lo......
  • CodeForces 1902F Trees and XOR Queries Again
    洛谷传送门CF传送门如果我们能把\(x\toy\)路径上的所有点权插入到线性基,那么可以\(O(\logV)\)查询。但是因为线性基合并只能\(O(\log^2V)\)(把一个线性基的所有元素插入到另一个),所以只能倍增做\(O((n+q)\logn\log^2V)\),过不了。考虑\(O(n\logV)\)预处理出......