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

news/2024/6/18 19:17:53 标签: 考研

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.niftyadmin.cn/n/342118.html

相关文章

elasticsearch全文检索

前面将结构化查询讲完了,接下来主要学习的是es的全文检索功能,其实如果说全文检索包含哪些搜索方式的话,主要就有大概以下几种: 匹配查询(match query)、短语查询(match phrase query)、短语前缀查询(match phrase prefix)、多字段查询(multi…

ARC137D Prefix XORs

ARC137D Prefix XORs 洛谷ARC137D Prefix XORs 题目大意 给你一个长度为 n n n的序列 A A A和一个整数 m m m。 对 k 1 , 2 , … . m k1,2,\dots.m k1,2,….m,求经过如下 k k k次操作后 A n A_n An​的值 对每个 i ( 1 ≤ i ≤ n ) i(1\leq i\leq n) i(1≤i≤…

pg事务:事务ID

事务ID pg中每个事务都会分配事务ID,事务ID分为虚拟事务ID和持久化事务ID(transactionID)。pg的事务ID非常重要,是理解事务、数据可见性、事务ID回卷等等的重要知识点。 虚拟事务ID 只读事务不会分配事务ID,事务ID是…

PID单环控制(位置环)

今天我们来聊一聊pid如何控制轮子转动位置 前期准备调试过程 前期准备 需要准备的几个条件: 1.获取实时编码器的计数值 2.写好pid控制算法的函数 3.设定好时间多久执行一次pid计算,并设置限幅输出。 4.多久执行一次pid输出 接下来我们看看这几个部分的…

信息安全工程复习

目录 第二章 从口令系统说起 2.1 身份鉴别常见手段及例子 2.2 多因子认证 2.3 计时攻击 2.4 口令机制 2.5 假托和钓鱼 第三章 安全协议 3.1 认证协议 3.2 安全协议攻击 3.3 密钥分配协议 3.4 课后作业 第四章 访问控制 4.1 概念 4.2 控制访问三要素 4.3 控制访问…

[RapidOCRWeb] 桌面版使用教程

引言 说明:桌面版指的是可以直接解压,双击即可运行的版本。通俗来说,对rapidocr_web做了打包,将相关依赖全部放到一个zip包中,不需要本地有额外的环境,降低使用门槛。下面会以Windows版为例,作…

jface

JFace 是建立在 SWT 之上的 UI 部件,它是 SWT 的扩展并能和SWT交互。 ApplicationWindow和Action org.eclipse.jface.window.ApplicationWindow; JFace为了简化窗口的设计特别设计了类,比如ApplicationWindow这一个类,它里面包含了六个默认…

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

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