ACMjava无根树转有根数,构建表达式

2024-02-25 11:32

本文主要是介绍ACMjava无根树转有根数,构建表达式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

package com.supermars.practice;import java.util.Arrays;
import java.util.Scanner;
import java.util.Vector;public class 无根树转有根树 {static Scanner cin = new Scanner(System.in);static Vector<Integer> G[] = new Vector[1 << 7];static int p[];;public static void main(String[] args) {while (cin.hasNext()) {int n = cin.nextInt();p = new int[n];for (int i = 0; i < n - 1; i++) { // n-1条边int u = cin.nextInt();int v = cin.nextInt();if (G[u] == null)G[u] = new Vector<Integer>();G[u].add(v);if (G[v] == null)G[v] = new Vector<Integer>();G[v].add(u);}Arrays.fill(p, -1);dfs(1, -1);// 节点1开始为跟,-1表示无父节点// System.out.println(Arrays.toString(p));}}private static void dfs(int u, int fa) {int d = G[u].size();// 多少个u节点的相邻节点for (int i = 0; i < d; i++) {int v = G[u].get(i); // u的相邻节点iif (v != fa) {dfs(v, p[v] = u); // 保存v节点的父亲uSystem.out.println(v + "的父节点" + p[v]);}}}
}

package com.supermars.practice;import java.util.Scanner;public class 表达式树 {static Scanner cin = new Scanner(System.in);static final int MAXN = 1 << 7;static char input[]; // 2+3*(4-1)-5/1 表达式字符串static char op[] = new char[MAXN]; // 节点中的操作符static int lch[] = new int[MAXN]; // 每个节点的左右儿子static int rch[] = new int[MAXN];static int nc = 0;// 节点个数public static void main(String[] args) {while (cin.hasNext()) {input = cin.nextLine().toCharArray();bulidTree(input, 0, input.length);System.out.println(transTree(0));}}private static int bulidTree(char[] s, int x, int y) {int c1 = -1, c2 = -1, p = 0;int u;if (y - x == 1) { // 只剩余一个操作字符节点u = nc++;lch[u] = rch[u] = 0; // 操作字符无左右子树op[u] = s[x]; // 保存操作字符return u;}// c1 最后+- c2最后*/的位置for (int i = x; i < y; i++) {switch (s[i]) {case '(':p++;break;case ')':p--;break;case '+':case '-':if (p == 0) // 在括号外c1 = i; // 最后+-的位置break;case '*':case '/':if (p == 0) // 最后*/的位置c2 = i;break;}}if (c1 < 0)c1 = c2; // 括号外没有加减if (c1 < 0)return bulidTree(s, x + 1, y - 1);// 求解[x+1,y-1]构造表达式u = nc++; // c1划分左右子树,lch[u] = bulidTree(s, x, c1); // 构造左子树rch[u] = bulidTree(s, c1 + 1, y);op[u] = s[c1]; // 存节点操作字符return u;}private static int transTree(int cur) {if (lch[cur] == 0 || rch[cur] == 0) { // 叶子节点返回值return op[cur] - '0';} else {int retl = transTree(lch[cur]); // 计算左子树的值int retr = transTree(rch[cur]);int ret = 0;switch (op[cur]) { // 根据当前节点分别计算左右子树+-*/的结果case '+':ret = (retl + retr);break;case '-':ret = (retl - retr);break;case '*':ret = (retl * retr);break;case '/':ret = (retl / retr);break;}// System.out.println(ret);return ret;}}
}

这篇关于ACMjava无根树转有根数,构建表达式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/745343

相关文章

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S