1d数组到二叉树中

时间:2015-11-20 12:21:44

标签: javascript arrays d3.js tree

 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/

1 个答案:

答案 0 :(得分:1)

我认为您只希望将parent功能向下舍入。

function  parent(i) {
  console.log("Parent =" + Math.floor((i-1)/2));
  return Math.floor((i-1)/2);
}