nodeArray = [ 3, 3, 7, 6, 6, 7, 15, 10, 10, 14, 13, 13, 14, 15, 23, 18, 18, 22, 21, 21, 22, 23, 0 ];
nodes = [];
links = [];
function left(i) {
return 2*i + 1;
}
function right(i) {
return 2*i + 2;
}
function parent(i) {
console.log("Parent =" + (i-1)/2);
return (i-1)/2;
}
var index = 0;
do{
if (index === 0) {
var node = {
'value': nodeArray[index],
'child1_index': left(index),
'child1_value': nodeArray[left(index)],
'child2_index': right(index),
'child2_value': nodeArray[right(index)],
'parent_index' : 'null',
'parent_value' : 'null'
};
} else {
var node = {
'value': nodeArray[index],
'child1_index': left(index),
'child1_value': nodeArray[left(index)],
'child2_index': right(index),
'child2_value': nodeArray[right(index)],
'parent_index' :parent(index),
'parent_value' : nodeArray[parent(index)],
'index' : index
};
}
nodes.push(node);
index++;
} while (index != nodeArray.length)
console.log(nodes);
我已经编写了上面的代码,以便将来把它变成带有d3.js库的二叉树,不幸的是我所有的父节点值(显然是由任何节点(index -1 )/ 2
给出的。)给出像5.5这样的数字是一半显然不会工作的索引或某些东西。有些节点给出完整的整数,然后有些节点没有。
我的一个节点对象的控制台输出示例。看起来不错
Node1:
parent_index:0
parent_value:3
其他节点对象的示例。看起来不对的是
Node2:
parent_index:0.5
parent_value:undefined
如果有人有兴趣,这是一个小伙伴 http://jsfiddle.net/mryfw095/5/
答案 0 :(得分:1)
我认为您只希望将parent
功能向下舍入。
function parent(i) {
console.log("Parent =" + Math.floor((i-1)/2));
return Math.floor((i-1)/2);
}