c++-我写的建立表达式二叉树的一个函数,delete[]p和B.pop(a1)出错,不明白为什么

问题描述

我写的建立表达式二叉树的一个函数,delete[]p和B.pop(a1)出错,不明白为什么

BinaryTree::BinaryTree(string A){
arrStack B(NUM);
BinaryTreeNode a1(" "), a2(" ");
int i = 0;
while (A[i] != '='){
char *p = new char[];
char *q = p;
int j = 0;
if ((int)A[i] >= 48 && (int)A[i] <= 57){
while ((int)A[i] >= 48 && (int)A[i] <= 57){
*p = A[i];
i++;
j++;
p++;
}
BinaryTreeNode node1(p);
B.push(node1);
}
else if ((int)A[i] == 32){
i++;
}
else if ((int)A[i] == 42 || (int)A[i] == 43 || (int)A[i] == 45 || (int)A[i] == 47){
*p = A[i];
BinaryTreeNode node2(p);
B.pop(a1);
B.pop(a2);
node2.setLeftChild(&a2);
node2.setRightChild(&a1);
B.push(node2);
i++;
}
p = q;
delete []p;
}
B.pop(a1);
*root = a1;
}

这个arrStack栈是我自己写的,代码如下:
template
class arrStack{
private:
int mSize;
int top;
T *st;
public:
arrStack(int size){
mSize = size;
top = -1;
st = new T[mSize];
}
arrStack(){
top = -1;
}
bool push(T item){
if (top == mSize - 1){
cout << "The arrStack has full!" << endl;
return false;
}
st[++top] = item;
return true;
}
bool pop(T &item){
if (top == -1){
cout << "The arrStack is empty!" << endl;
return false;
}
item = st[top--];
return true;
}
T topItem(){
if (top == -1){
cout << "The arrStack is empty!" << endl;
return false;
}
return st[top];
}
bool isEmpty(){
if (top == -1)
return true;
else
return false;
}
bool isFull(){
if (top == mSize - 1)
return true;
else
return false;
}
};

时间: 2024-09-20 07:56:28

c++-我写的建立表达式二叉树的一个函数,delete[]p和B.pop(a1)出错,不明白为什么的相关文章

一步一步写算法(之二叉树深度遍历)

原文:一步一步写算法(之二叉树深度遍历) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com]     深度遍历是软件开发中经常遇到的遍历方法.常用的遍历方法主要有下面三种:(1)前序遍历:(2)中序遍历:(3)后序遍历.按照递归的方法,这三种遍历的方法其实都不困难,前序遍历就是根-左-右,中序遍历就是左-根-右,后续遍历就是左-右-根.代码实现起来也不复杂.     1)前序遍历 void preorder_traverse(TREE_NOD

请看一个大神写的lambda表达式,不用linq请问怎么调用

问题描述 请看一个大神写的lambda表达式,不用linq请问怎么调用 Func<int, bool> MyAnd(Func<int, bool> f1, Func<int, bool> f2) { return x => f1(x) && f2(x); } 解决方案 直接调用也可以: bool b1 = MyAnd(x => x < 10, x => x % 2 == 0)(4); bool b2 = MyAnd(x =>

求解答一下-java问题 中缀表达式写成后缀表达式

问题描述 java问题 中缀表达式写成后缀表达式 第五题 求解答............................ 解决方案 中缀表达式转换为前缀及后缀表达式并求值(java实现)java 中缀表达式转后缀表达式java中缀表达式转后缀表达式

c语言-参照网上,自己改用链栈写了个表达式求值的代码出现的问题

问题描述 参照网上,自己改用链栈写了个表达式求值的代码出现的问题 这个代码可以编译运行,但是输入值进行计算的时候就会停止工作 附上代码: 附上代码求指导: #include #include typedef struct rope { char date; struct rope next; } node,*pnode; typedef struct rope2 { char date; struct rope2 *next; } nodes,*pnodes; typedef struct a

Java实现表达式二叉树_java

什么是二叉树,这里不再介绍,可以自行百度:二叉树.在这里利用java实现"表达式二叉树".  表达式二叉树的定义  第一步先要搞懂表达式二叉树是个什么东东?举个栗子,表达式:(a+b×(c-d))-e/f.将数字放在叶子节点,将操作符放在分支节点,就构成了一个二叉树,由于存储的是一个表达式,称之为"表达式二叉树". 童靴们可能好奇这个到底是怎么构建的?就拿45+23*56/2-5来说吧.首先取出第一个数字45放在叶子节点,遇到"+"后将其放到分支

jsp-JSP中编写JS代码过程中,调用了一个JSP表达式,发现一个问题,麻烦各位大神解答

问题描述 JSP中编写JS代码过程中,调用了一个JSP表达式,发现一个问题,麻烦各位大神解答 背景: 楼主使用Myelipse新建了一个Web项目,在编写一个JSP文件的时候遇到一个问题,首先是使用了img,并且写了一个事件,代码如下: <imgclass="poke" src="poke/back.jpg" title="hit" id="play_id_3" onClick="change_pic()&qu

问题求助 数据结构-使用双栈实现中缀表达式求值一个字符栈一个数字栈

问题描述 使用双栈实现中缀表达式求值一个字符栈一个数字栈 程序写好没输出啊,急求啊......主要BUG 在Nibolansuanfa()这个自定义函数里面前面的可以忽略..... /*核心函数*/ double Nibolansuanfa(char *str,stack *s) { initstack(&s);//初始化栈 char st[20],tc,xy;//st[20]里面放数字字符串 int j=0,i=0,yxcount=0; double d; while(str[j]!='')

用javascript写的字符串加密程序,用if判断程序正常,用switch出错

问题描述 用javascript写的字符串加密程序,用if判断程序正常,用switch出错 大家好,这段代码实现这样的功能: 1.用户输入全是小写字母的字符串,不支持空格和标点符号: 2.程序将字符串中的每个字母,按字母表顺序,向后移动5位,并输出新字符串: <script type="text/javascript"> var str=prompt("请输入要加密的字符串:").split(""); var newStr=[]; v

javascript高级编程之函数表达式 递归和闭包函数_javascript技巧

定义函数表达式有两种方式:函数声明和函数表达式. 函数声明如下: function functionName(arg0,arg1,arg2){ //函数体 } 首先是function关键字,然后是函数的名字. FF,Safrai,Chrome和Opera都给函数定义了一个非标准的name属性,通过这个属性可以访问到函数指定的名字.这个函数的值永远等于跟在function关键字后面的标识符. //只在FF,Safari,Chrome和Opera有效 alert(functionName.name)