在JavaScript中遍历二进制搜索树时构建对象
其思想是遍历二叉搜索树(BST)并用相同的方法构建一个对象。对象表示BST 例如:在JavaScript中遍历二进制搜索树时构建对象,javascript,binary-search-tree,javascript-objects,tree-traversal,Javascript,Binary Search Tree,Javascript Objects,Tree Traversal,其思想是遍历二叉搜索树(BST)并用相同的方法构建一个对象。对象表示BST 例如: 20 / \ 5 60 \ / \ 10 40 90 \ 50 \ 55 我可以在向BST插入元素时生成这个对象,但是,因为我想在其中应用一些平衡算法,所以不需要插入任何其他节点。我只需要得到最终的物体和平衡的结果 出现的导线测量方法是宽度优先法。然而,我没有弄
20
/ \
5 60
\ / \
10 40 90
\
50
\
55
我可以在向BST插入元素时生成这个对象,但是,因为我想在其中应用一些平衡算法,所以不需要插入任何其他节点。我只需要得到最终的物体和平衡的结果
出现的导线测量方法是宽度优先法。然而,我没有弄清楚如何用非递归方法构建对象,因为广度优先旅行是一种迭代方法
对于上述示例,结果对象应如下所示:
{
val:20,
l:{
val:5,
l:{},
r:{
val:10,
l:{},
r:{}
}
},
r:{
val:60,
l:{
val:40,
l:{},
r:{
val:50,
l:{},
r:{
val:55,
l:{},
r:{}
}
}
},
r:{
val:90,
l:{},
r:{}
}
}
}
到目前为止,我得到的是:
Breadth_first = function (callback) {
var q = [];
q.push(root);
while(q.length > 0){
var node = q.shift();
callback(node.level, node.value);
if(node.leftChild.value !== null){
q.push(node.leftChild);
}
if(node.rightChild.value !== null){
q.push(node.rightChild);
}
}
}
我当前用于以这种格式构建对象的方法如下:
insertNode = function (node, value, jsObj) {
if (node.value === null) {
node.leftChild = new Node();
node.rightChild = new Node();
node.value = value;
jsObj.val = value;
return true;
}
var nodeVal = parseInt(node.value, 10);
if (value < nodeVal) {
if(!jsObj.l.val)
jsObj.l = {val:null, l:{}, r:{}};
insertNode(node.leftChild, value, jsObj.l);
} else if (value > nodeVal) {
if(!jsObj.r.val)
jsObj.r = {val:null, l:{}, r:{}};
insertNode(node.rightChild, value, jsObj.r);
}
}
insertNode=函数(节点,值,jsObj){
if(node.value==null){
node.leftChild=新节点();
node.rightChild=新节点();
node.value=值;
jsObj.val=值;
返回true;
}
var nodeVal=parseInt(node.value,10);
如果(值<节点值){
如果(!jsObj.l.val)
l={val:null,l:{},r:{};
insertNode(node.leftChild,value,jsObj.l);
}否则如果(值>节点评估){
如果(!jsObj.r.val)
r={val:null,l:{},r:{};
insertNode(node.rightChild,value,jsObj.r);
}
}
任何猜测或线索将不胜感激