考研复试刷题第十四天: 表达式树 【二叉树,表达式运算】

news2024/11/13 15:09:42

1.概念解释:

    表达式树其实就是叶节点装树,其他节点装符号的二叉树。

2.题目部分 

这道题一开始没理解它的意思,以后写题一定要理解题意之后再动手。尤其是看清楚注意事项。

我一开始拿到题目,以为会有这种情况就是说一个节点之下会有一遍没有数字,那么这个树不就不能加括号了,所以以为这道题需要考虑很多情况,于是就去看了一下y总的思路,但是发现根本不是那样的,因为这道题保证表达式是可以计算的,所以只存在一种情况也就是题目给出的那种情况:

 看左边,-号节点只有右边有个字母d,这种情况也是加括号。那题目其实很简单了。

节点除了根节点之外其实就三种情况。
1. 叶节点,我们直接接到字符串就可以了。

2. 如果不是叶节点,然后有两个节点,那么就将它作为一个表达式,然后用括号括好就行。

3.如果只有一个节点,前面我们已经讨论过了,其实处理方式和第2中情况没区别,当成第二种情况即可

然后我们就可以将代码顺利写出。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     string val;
 *     TreeNode *left;
 *     TreeNode *right;
 * };
 */
class Solution {
public:
    string str = "";
    void dfs(TreeNode* root){
        if(!root) return;
        if(root->left==NULL && root->right==NULL){
            str += root->val;
        }else{
            str += "(";
            dfs(root->left);
            str += root->val;
            dfs(root->right);
            str += ")";
        }
    }
    string expressionTree(TreeNode* root) {
        dfs(root->left);
        str += root->val;
        dfs(root->right);
        return str;
    }
};

至于为啥用一个全局变量,我当时是没多想,觉得这样好些一些,看了y总的录播,没想到歪打正着。
 

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     string val;
 *     TreeNode *left;
 *     TreeNode *right;
 * };
 */
class Solution {
public:

    string dfs(TreeNode* root){
        if(!root)   return "";//如果左儿子为空
        if(!root->left && !root->right) return root->val;//如果是叶子结点,直接返回值就可以
        return '(' + dfs(root->left) + root->val + dfs(root->right) + ')';
    }

    string expressionTree(TreeNode* root) {
        return dfs(root->left) + root->val + dfs(root->right);
    }
};

看上面这段代码,乍一看没有区别,但其实区别大了,我的写法只用O(n)的算法复杂度,但是他这个却需要O(N的平方),至于为什么,那是因为c++里函数返回字符串的时候是将字符串复制一份给我们,那如果是这样的话,我们拿笔分析一下。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/547720.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面了一个测试工程师要求月薪26K,总感觉他背了很多面试题...

最近有朋友去华为面试,面试前后进行了20天左右,包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮面试。 其实&…

OpenLayers多图层切换显示隐藏,支持多个Layer同时显示和隐藏,以百度地图和高德地图为例实现vue的Layer图层管理组件

前言 OpenLayers默认并没有提供图层管理组件,实现起来也很简单,评论区里有同学提到了这个,必须立刻满足,这就着手区实现一个简单又强大的地图图层管理组件。 那么本章就专门讲一下在vue中如何使用ElementUI的下拉框做一个简单的图层管理组件。 话不多说,让我们直接开始吧…

CentOS中vim的使用

vim是我们linux中很经典的一款编译器,所以使用vim是我们在学习过程中必不可少的,我们下面说一下vim的使用和安装 在某些服务器上刚开始不一定时有vim的,或者是vim的版本比较老一点,所以这时我们就可以安装一下vim sudo yum -y i…

最简单的 Java 项目——Hello world(小白快速入门指南)

文章目录 最简单的 Java 项目——Hello world步骤1:新建 Java 项目步骤2:编写最简单的 Hello World 程序步骤3:测试 附录1、.iml文件(iml是 intellij idea的工程配置文件,里面是当前project的一些配置信息。&#xff0…

免费开源PCB设计工具--KiCad安装,FreeCAD下载方法

中小企业在使用AD等工具时,会被律师函关照,下面介绍一款跨平台开源PCB设计工具KiCad 。本文仅介绍安装方法。 1. KiCad 简介 KiCad 一个跨平台的开源电子设计自动化套件。 KiCad EDA 是一款用于印刷电路板设计的开源自由软件,最初由法国人…

Shell编程——iptables防火墙

Shell编程——iptables防火墙 一、Linux包过滤防火墙1、Linux防火墙概述2、netfilter3、iptables4、netfilter/iptables关系 二、四表五链1、表链作用2、四表3、五链4、数据包到达防火墙时,规则表之间的优先顺序5、规则链之间的匹配顺序 三、iptables的安装四、ipta…

Swing简述

一、Swing概述 GUI(图形用户界面)为程序提供图形界面,它最初的设计目的是为程序员构建一个通用的GUI,使其能够在所有的平台上运行,但Java 1.0中基础类AWT(抽象窗口工具箱)并没有达到这个要求&a…

chatgpt赋能Python-python3_kafka

简介 Kafka是一个分布式的消息队列系统,由LinkedIn开源。它被设计成高性能、高吞吐量的消息传输系统,适用于分布式系统中的实时数据流处理。 Kafka的优势 在使用Kafka之前,我们需要考虑以下问题: 1.数据处理速度是否快速&…

黑客如何从零学起?

一、MYSQL5.7 MySQL是如今使用最多的数据库,是众多企业的首选,在未来几年都将被持续推动发展。 学习MySQL需注重实战操作,循序渐进地了解MySQL中的各项技术,这样才能在实际工作中的关键应用。 想进入网络安全行业, …

机器学习-2 线性回归

线性回归及最大熵模型 算法概述最小二乘法一元线性回归求解方程系数代价函数最小二乘法求解系数 多元线性回归举例 算法应用数据集介绍实现线性回归算法实现线性回归的算法流程最小二乘法的局限性 梯度下降法场景梯度下降算法(Gradient Descent)算法实例…

Electron,我与你,今天不谈技术谈感情!

目录 前言一、无知二、初见三、再见四、相遇五、行动总结 前言 今天不谈技术,谈谈我和 Electron 的缘分。可能有人觉得,或许有些人认为,和一个框架谈感情这不是疯了吗?但是,我相信每个开发者都会有同样的经历&#xf…

关于蒙特卡罗方法及其在信号处理中的应用

说明 最近想探讨一下毫米波雷达测量准确度及其改善的问题,这个话题下可供讨论的问题有很多,蒙特卡罗方法(或者说基于蒙特卡罗方法对测量准确度以及精度的评估)是其中之一,该方法是一个十分有效的工具,在科研(发paper)上也是不可少…

UE5 C++类如何读取Excel配置表?

UE5 插件开发指南 前言0 如何编写读取数据的结构体?1 如何读取数据?1.0 如何获取数据资产的路径?2 如何调用商店子系统来读取数据?前言 虚幻引擎兼容CSV和JSON格式的数据结构,这里的CSV是Excel表格的保存格式,如下图所示: 打开任意Excel表格,点击文件菜单,然后鼠标悬浮到…

一文2000字从0到1教你搭建有效的测试环境

作为软件测试行业的从业者,搭建测试环境一定是在工作中少不了的任务安排,那么如何有效的搭建测试环境,咱们今天和大家聊一聊。 首先大家要明白测试环境是为了完成软件测试工作所需要的硬件资源,软件资源,网络资源&…

计算机网络实验(ensp)-​实验2:PPP协议及PAP认证

目录 实验报告: 实验操作 1.建立网络拓扑图并开启设备 2.修改路由器名字 1.输入命名:sys 从用户视图切换到系统视图 2.输入命名:sysname 姓名 修改路由器名字 3.重复步骤1和2配置每台路由器 3.抓包 1.点击菜单栏的“数…

(转载)从0开始学matlab(第7天)—运算的优先级与内置函数

1运算的优先级 许多的数学运算写入一个表达式是非常平常的事。例如,考虑初速度为 0 的匀加速运动的位移表达式 distance 0.5 * accel * time ^ 2 这个表达式有二个乘法运算和一个幂运算。在这样的表达式中,知道运算的先后顺序是十分重要的。如果幂运算先…

Redis系统学习篇-02

目录 redis进阶使用 redis作为数据库、缓存的区别 缓存常见问题、面试回答思路 redis的持久化 参考文档(redis.net.cn):Redis 教程_redis教程 系统学习01篇,总结起来就是,可以把redis想象成一个key/value的hashmap,只不过val…

Linux之路SNAT策略及应用

目录 二、SNAT实验的部署设计 三、具体实验步骤 第一步:做好实验前的虚拟机设置 1)网关服务器的设置 ①添加网卡,修改vmnet ②修改ens33为网关服务器的内网网卡 ③修改新加网卡ens36(这里添加的网卡是什么就用什么&#xff…

FATFS移植 - 基于N32G4FR在SD卡(sd nand)上移植FATFS文件系统

FATFS移植 - 基于N32G4FR在SD卡(sd nand)上移植FATFS文件系统 文章目录 FATFS移植 - 基于N32G4FR在SD卡(sd nand)上移植FATFS文件系统1. 前言2. FATFS文件系统介绍2.1 文件系统的概念和作用2.2 FATFS的特点和优势 3. 相关源码获取3.1 FatFs文件源码下载3.2 国民技术N32软件开发…

我们详细讲讲UI自动化测试最佳设计模式POM

概念 什么是POM? POM是PageObjectModule(页面对象模式)的缩写,其目的是为了Web UI测试创建对象库。 在这种模式下,应用涉及的每一个页面应该定义为一个单独的类,类中应该包含此页面上的页面元素对象和处…