如何画出一个表达式的树形结构

大家都知道,表达式树前序遍历得到前缀表达式,中序遍历得到中缀表达式,后序遍历得到后缀表达式,

那么,如何根据最常见的中缀表达式画出表达式的树形结构图呢?

步骤1:求出中缀表达式对应的后缀表达式

步骤2:根据后缀表达式画图

我们一次一个符号地读入后缀表达式。如果符号是操作数,那么就建立一个单结点树并将它的指针推入栈中。如果符号是操作符,那么就从栈中弹出两棵树T1和T2(假设T1先弹出)并形成一棵新的树,该树的根就是操作符,它的左、右儿子分别是T2和T1。然后将指向这颗树的指针压入栈中。

下面来看一个例子。设转换后的后缀表达式输入为ab+cde+**

前两个符号是操作数,因此创建两棵单结点树并将指向它们的指针压入栈中。
 
 
接着,"+"被读入,因此指向两棵树的指针被弹出,形成一棵新的树,并将指向它的指针压入栈中。
 

然后,c,d和e被读入,在单个结点树创建后,指向对应的树的指针被压入栈中。
 
 
接下来读入"+"号,因此两棵树合并。
 
 
继续进行,读入"*"号,因此,弹出两棵树的指针合并形成一棵新的树,"*"号是它的根。
 
 
最后,读入一个符号,两棵树合并,而指向最后的树的指针被留在栈中。
 

### 回答1: 首先,我们需要将表达式表示为树形结构: ``` E | _______ | | a ___ | | + | / \ d b * / \ c + /\ f gh ``` 接下来,我们可以使用减少高的方法来加速运算。我们从最底层开始向上计算,将结果传递到上一层。具体步骤如下: 1. 首先,计算出最底层的两个叶节点 `f` 和 `gh` 的乘积,得到结果 `x = f * gh = fgh`。 2. 然后,计算出中间层的加法节点 `+` 的值,即 `y = d + x = d + fgh`。 3. 接着,计算出中间层的乘法节点 `*` 的值,即 `z = c * y = c * (d + fgh)`。 4. 最后,计算出根节点 `E` 的值,即 `E = a * (b + z) = a * (b + c * (d + fgh))`。 根据上述计算过程,我们可以确定各个节点的 TP、P、SP 和 EP 值: ``` E ----------------------------------------------------- | | | TP=E P=E EP=E | | | a * (b+z) + | / \ + b * / \ / \ b z c y | + | / \ d x ``` 其中,TP 表示该节点的计算开始时间,P 表示该节点的计算结束时间,SP 表示该节点的所有子节点的计算结束时间中的最大值,EP 表示该节点的所有父节点的计算开始时间中的最小值。 根据上面的形图,我们可以得到各个节点的 TP、P、SP 和 EP 值如下: | 节点 | TP | P | SP | EP | | --- | --- | --- | --- | --- | | a | 1 | 2 | 2 | 1 | | b | 3 | 4 | 4 | 3 | | c | 5 | 12 | 12 | 5 | | d | 6 | 7 | 7 | 6 | | f | 9 | 10 | 10 | 9 | | g | 11 | 12 | 12 | 11 | | h | 11 | 12 | 12 | 11 | | + (d+x) | 8 | 10 | 10 | 8 | | * (c*(d+x)) | 5 | 11 | 11 | 5 | | + (b+z) | 3 | 12 | 12 | 3 | | E (a*(b+z)) | 1 | 13 | 13 | 1 | ### 回答2: 根据霍纳法则给定的表达式:E=a(b c(d e(f gh))),我们可以通过减少高的办法来加速运算。根据霍纳法则,我们可以先计算最后一个乘法运算 f*gh,并将其结果记为 TP。 接下来,我们计算 e*(f*gh),将其结果记为 P。 然后计算 d*(e*(f*gh)),将其结果记为 SP。 接着计算 c*(d*(e*(f*gh))),将其结果记为 EP。 最后计算 a*(c*(d*(e*(f*gh)))),将其结果记为 E。 根据画出形图可以得到以下运算步骤和结果: 步骤1:计算 f*gh,记为 TP。 步骤2:计算 e*(f*gh),记为 P。 步骤3:计算 d*(e*(f*gh)),记为 SP。 步骤4:计算 c*(d*(e*(f*gh))),记为 EP。 步骤5:计算 a*(c*(d*(e*(f*gh)))),记为 E。 通过减少高的办法,我们只需进行5次乘法运算就可以得到最终结果 E,相比原始的高,运算速度得到了加速。 换算成数学表达式如下: TP = f * gh P = e * TP SP = d * P EP = c * SP E = a * EP 根据以上计算步骤和公式,我们可以通过减少高的办法来加速运算,并根据所画出形图确定 TP、P、SP、EP 和 E 的值。 ### 回答3: 根据霍纳法则给定的表达式E=a(b c(d e(f gh)))来加速运算,可以通过减少高的办法。首先,我们可以根据表达式构造出相应的形图。 形图如下: E ___/ \____ | | a ___/ \____ | | b __/ \___ c __/ \___ d ___/ \____ | | e __/ \____ f __/ \___ g h 根据画出形图,我们可以确定各个节点的值。 - 顶点TP(Top of the Polynomial):表示整个多项式的值。通过计算顶点TP,我们可以得到整个表达式E的结果。在这里,TP表示a的值。 - 顶点P(Product):表示每个乘积的值。P节点的子节点表示乘法操作的两个操作数。在这里,有两个P节点,分别表示b和c的乘积。 - 顶点SP(Sum of the Products):表示每个加法项的值。SP节点的子节点表示加法操作的两个操作数。在这里,只有一个SP节点,表示b乘以c乘以d乘以e乘以f乘以gh的和。 - 顶点EP(Elementary Product):表示每个元素的值。EP节点的子节点表示每个乘法操作的操作数。在这里,有七个EP节点,分别表示b、c、d、e、f、g和h的值。 根据上述分析,我们可以从最底层的EP节点开始计算,依次计算出每个EP节点的值,再通过乘法和加法操作得到SP节点和TP节点的值,最终得到整个表达式E的结果。 通过减少高,可以减少计算的次数和运算的复杂度,提高计算效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值