作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试评估二叉树(中序)。结果始终保持不变相同或给出意想不到的答案。不知道问题出在哪里,可以有人帮助我吗?首先,我将后缀表达式转换为表达式树,然后评估表达式树。我将非常感激。
当我运行这个程序时,结果是出乎意料的。这是头文件。
#define POST2EXPTREE_H_INCLUDED
#define MAX 100
struct node
{
char ch;
struct node *left;
struct node *right;
} *stack[MAX];
typedef struct node node;
void push(node *str);
node *pop();
void convert(char exp[]);
void display(node *temp);
#endif
#include <stdio.h>
#include <stdlib.h>
#include"post2expTree.h"
#define SIZE 100
int top = -1;
void push(node *str)
{
if (top >= MAX-1)
printf("Stack is Full ");
else
{
stack[top] = str;
top++;
}
}
node *pop()
{
node *exp;
if (top < 0)
printf("Stack is Empty ");
else
exp = stack[--top];
return exp;
}
void convert(char exp[])
{
node *op1, *op2;
node *temp;
int i;
for (i=0;exp[i]!='\0';i++)
if (exp[i] >= 'a'&& exp[i] <= 'z'|| exp[i] >= 'A' && exp[i] <= 'Z' ||isalnum(exp[i]))
{
temp = (node*)malloc(sizeof(node));
temp->ch = exp[i];
temp->right = NULL;
temp->left = NULL;
push(temp);
}
else if (exp[i] == '+' || exp[i] == '-' || exp[i] == '*' || exp[i] == '/' || exp[i] == '%'
|| exp[i] == '^')
{
op1 = pop();
op2 = pop();
temp = (node*)malloc(sizeof(node));
temp->ch = exp[i];
temp->right = op1;
temp->left = op2;
push(temp);
}
}
void display(node *temp)
{
if (temp != NULL)
{
display(temp->left);
printf("%c", temp->ch);
display(temp->right);
}
}
int evaluate(node *temp)
{
int left,right,value;
if ((temp->ch) >= 0 || (temp->ch <=9))
{
return temp->ch;
}
else
{
left = evaluate(temp -> left);
right = evaluate(temp -> right);
switch(temp->ch)
{
case '+':
value = left + right;
break;
case '-':
value = left - right;
break;
case '*':
value = left * right;
break;
case '/':
value = left / right;
break;
case '%':
value = left % right;
break;
case '^':
value = left ^ right;
break;
}
temp->ch = value;
}
return value;
}
最佳答案
int top = -1;
void push(node *str)
{
if (top >= MAX-1)
printf("Stack is Full ");
else
{
stack[top] = str;
top++;
}
}
top
初始化为 -1
,第一个 push()
错误地访问了 stack[-1]
;通过将 else
block 更改为 stack[++top] = str;
来更正该问题。node *pop()
{
node *exp;
if (top < 0)
printf("Stack is Empty ");
else
exp = stack[--top];
return exp;
}
top
在访问stack
之前减一;通过将 else
block 更改为 exp = stack[top--];
来更正该问题。int evaluate(node *temp)
{
int left,right,value;
if ((temp->ch) >= 0 || (temp->ch <=9))
{
return temp->ch;
这里您忘记了将操作数存储为单个数字 '0'
到 '9'
,而不是值 0
到9
。通过更改为更正该问题:
int left, right, value = temp->ch-'0';
if (value >= 0 && value <= 9)
{
return value;
关于c - 如何评估二叉树(中序)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55630042/
序 大家好呀,我是summo,这次来写写我在上班空闲(摸鱼)的时候做的一个小网站的事。去年阿里云不是推出了个活动嘛,2核2G的云服务器一年只要99块钱,懂行的人应该知道这个价格在业界已经是非常良心了
我尝试根据给定的级别顺序(BFS 顺序)构造 BST。我知道这是可能的,但我不知道我该怎么写。问题是我必须使用 BFS 序列。所以,我不能在这里使用递归,我必须迭代地编写我的程序......我发现这有
我是一名优秀的程序员,十分优秀!