gpt4 book ai didi

javascript - 需要帮助修复 Javascript 中的无限循环

转载 作者:行者123 更新时间:2023-12-03 03:22:50 27 4
gpt4 key购买 nike

我有以下逻辑,当我在独立的 jsbin 中运行它时,它工作正常并返回结果。代码只是将字符串反序列化为树对象

我的需求是获取“1,2,3,4”这样的字符串格式的节点信息,然后输出二叉树结构的节点:1为root,2为root.left,3为root.right , 4 代表 root.left.left 等...

但是当我使用 require 命令使用 node.js 调用它时,while 循环将永远持续下去并且不会返回值..

我是 Node.js 新手。

请帮忙

独立的 jsbin 脚本以下代码的链接在 jsbin 中运行

http://jsbin.com/tukigaq/edit?js,console,output

(function(exports) {
'use strict';

console.clear();

var createTree = function(treeString) {

var createTreeNode = function(value) {
var TreeNode = function(value) {
this.left = null;
this.right = null;
this.val = value;
};
return new TreeNode(value);
};

var treeStringSplit = treeString.split(',');
var root = createTreeNode(treeStringSplit[0]);
var q = [];
q.push(root);

var i = 1;
while (q.length > 0) {
var node = q.shift();

if (node == null)
continue;

if (treeStringSplit[i] !== '#') {
node.left = createTreeNode(treeStringSplit[i]);
q.push(node.left);
} else {
node.left = null;
q.push(null);
}

i++;

if (treeStringSplit[i] !== '#') {
node.right = createTreeNode(treeStringSplit[i]);
q.push(node.right);
} else {
node.right = null;
q.push(null);
}
i++;
}

return root;
}

console.log(createTree("1,#,2,3,4"));


})(typeof window === 'undefined' ? module.exports : window)

我如何在测试方法中调用它

  var expect = require('chai').expect;
var helper = require('../index');

describe('createTree', function() {
test createTree function
it('should create a tree for the structure', function() {
var result = helper.createTree("1,2,3");
expect(result.val).to.equal(1);
expect(result.left.val).to.equal(2);
expect(result.right.val).to.equal(2);
});
it('should create a tree for the structure', function() {
var result = helper.createTree("1,#");
expect(result.val).to.equal(1);
expect(result.left.val).to.equal(null);
expect(result.right.val).to.equal(null);
});
});

最佳答案

是的,您在一开始就移动了数组,但是随后您在每次循环中都将多次推送到数组。

每次传递时都会移走第一个元素,但是这两个 if 语句都会向数组添加新元素:

    if (treeStringSplit[i] !== '#') {
node.left = createTreeNode(treeStringSplit[i]);
q.push(node.left);
} else {
node.left = null;
q.push(null);
}

i++;

if (treeStringSplit[i] !== '#') {
node.right = createTreeNode(treeStringSplit[i]);
q.push(node.right);
} else {
node.right = null;
q.push(null);
}

i++;

所以你拥有的元素总是比你要移走的元素多。我不太确定您想要完成什么,但是您将需要一些额外的控制逻辑,以从数组中删除更多元素或防止在每次传递中添加多个元素。

工作示例

这是一个笨蛋,其中包含我认为您想要实现的行为的工作示例:https://jsfiddle.net/abfoxef/25ny62h8/

二叉树代码不是我的,它改编自 an excellent resource on computer science in javascript

改编后的原始代码

这是一个片段(不会永远运行),您可以在其中看到数组结构中发生的情况:

var createTree = function(treeString) {

var createTreeNode = function(value) {
var TreeNode = function(value) {
this.left = null;
this.right = null;
this.val = value;
};
return new TreeNode(value);
};

var treeStringSplit = treeString.split(',');
var root = createTreeNode(treeStringSplit[0]);
var q = [];
q.push(root);

var i = 0;
console.log('What is q in the beginning?', q);
while (i < 25) {
var node = q.shift();
console.log('What is q after shift?', q);

if (node == null)
continue;

if (treeStringSplit[i] !== '#') {
node.left = createTreeNode(treeStringSplit[i]);
q.push(node.left);
} else {
node.left = null;
q.push(null);
}

i++;

if (treeStringSplit[i] !== '#') {
node.right = createTreeNode(treeStringSplit[i]);
q.push(node.right);
} else {
node.right = null;
q.push(null);
}

i++;

console.log('What is q at the end of the loop', q);
}

return root;
}
console.log(createTree("1,#,2,3,4"));

关于javascript - 需要帮助修复 Javascript 中的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46495120/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com