- 29
- 0
实现能够计算算式字符串,不能通过eval,网上找了一个利用二叉树的方式,然后恶补了下二叉树,但是在看下面的代码时依然无法很多困惑,这个二叉树怎么建立起来的?哪里体现了二叉树?望路过的各位大神指点下(尽可能详细些,谢谢)。
function CalcNode(expr){
var exprArr = expr.split("");
var length = exprArr.length;
var index = 0;
this.left = null;
this.right = null;
if(length>1){
for(i=length-1; i>=0; i--){
//这个地方的循环的目的是什么?
//带进算式字符,看了下,是获取加减或乘除的位置
if(exprArr[i] === "*" || exprArr[i] === "/"){
index = i;
}else if(exprArr[i] === "+" || exprArr[i] === "-"){
index = i;
break;
}
}
var leftArr = [];
var rightArr = [];
for(var i=0; i<index;i++){
leftArr.push(exprArr[i]);
}
for(var i=index+1; i<length; i++){
rightArr.push(exprArr[i]);
}
// 这上面的两个for循环根据下标分割算式字符,为什么这么做?
//它是怎么考虑到先乘除后加减的?
var left = new CalcNode(leftArr.join(""));
var right = new CalcNode(rightArr.join(""));
this.left = left;
this.right = right;
}
this.value = exprArr[index];
}
CalcNode.prototype.calculate = function(){
var res = 0;
if(this.left=== null && this.right === null){
res = parseInt(this.value);
}else{
var leftValue = this.left.calculate();
var rightValue = this.right.calculate();
switch(this.value){
case "*":
res += leftValue*rightValue;
break;
case "/":
res += leftValue/rightValue;
break;
case "+":
res += leftValue+rightValue;
break;
case "-":
res += leftValue - rightValue;
default:
break;
}
}
return res;
}
var cnode = new CalcNode("1+2*3+4"); 0
打赏
收藏
点击回答
您的回答被采纳后将获得:提问者悬赏的 11 元积分
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

