用javascript打印树
我需要打印我的树,但我不知道怎么做。我想我可以使用递归。我想知道有没有更简单的方法?这是代码用javascript打印树,javascript,Javascript,我需要打印我的树,但我不知道怎么做。我想我可以使用递归。我想知道有没有更简单的方法?这是代码 var tree = new Object(); string = "23*4+5-"; tree = MakeMeATree(string, string.length - 1); function MakeMeATree(string, t) { var tree = {}; if (t == 0) return; tree.name = string.charAt(t);
var tree = new Object();
string = "23*4+5-";
tree = MakeMeATree(string, string.length - 1);
function MakeMeATree(string, t)
{
var tree = {};
if (t == 0) return;
tree.name = string.charAt(t);
t--;
if ( isOperand(string.charAt(t)))
{
tree.left = string.charAt(t);
tree.right = string.charAt(t-1);
t--;
tree.left = MakeMeATree(string, t);
}
if ( isOperand(string.charAt(t-1)))
{
tree.left = string.charAt(t-1);
tree.right = string.charAt(t);
t--;
tree.left = MakeMeATree(string, t);
}
else
{
tree.left = string.charAt(t);
tree.right = string.charAt(t-1);
t--;
}
return tree;
}
另外,我也不确定退货,我的意思是我应该同时使用returntree
?还是就在最后
UPD:
我想这个函数是有效的
PrintMeTree(tree);
function PrintMeTree(tree)
{
while (tree.name != undefined && tree.left != undefined && tree.right != undefined)
{
WScript.Echo(tree.name + " " + tree.left + " " + tree.right);
PrintMeTree(tree.left)
PrintMeTree(tree.right)
return;
}
}
这会让你变成一棵树
function isOperand(term) {
return /[0-9]/.test(term);
}
function MakeMeATree(string) {
var p = string.length - 1;
function consumeTree() {
var op = string.charAt(p--);
if (isOperand(op)) {
return op;
} else {
var right = consumeTree();
var left = consumeTree();
return {
name: op,
left: left,
right: right
};
}
}
return consumeTree();
}
var tree = MakeMeATree("23*5+5-");
console.log(JSON.stringify(tree));
/*
{
"name":"-",
"left":{
"name":"+",
"left":{
"name":"*",
"left":"2",
"right":"3"
},
"right":"5"
},
"right":"5"
}
*/
树是递归数据结构,因此递归是处理它们的自然方式。将
var tree=new Object()
(或better…={}
)放在MakeMeATree
函数中。否则,只有一个对象将被重复覆盖。